Я хотел бы использовать Silex в качестве базового фреймворка для пары сервисов. Он будет использоваться разными клиентами и API-интерфейсами (мобильными, веб-и т. Д.), Поэтому я обычно стараюсь избегать куки / сессии и «делать это» с помощью заголовков.
Настройка / поток того, что я пытаюсь достичь:
пользователь входит в свое мобильное приложение / на веб-страницу, генерируя запрос к authservice.domain.com, получает новый токен в качестве ответа, который также зарегистрирован в хранилище токенов
при доступе пользователя из веб-сайта или мобильного приложения products.domain.com токен считывается из заголовков и проверяется в магазине.
Все выглядит красиво, но почему-то я не могу заставить Silex добавлять заголовки к запросам после шага входа в систему, я могу добавить его к ответу, но не к запросу (я пытался использовать до / после промежуточного ПО, поэтому 1-й авторизации, затем добавить токен в $ приложение-> после / до) … кстати. Я не уверен, правильно ли я понимаю, но если пользователь нажмет кнопку обновления страницы при установке заголовков таким образом, не потеряется ли пользовательский заголовок? если это так, то возможно ли сохранить токен в заголовках без файлов cookie / сеансов?
Вот пример кода, который я запускаю после получения токена, он получает наборы по ответу (и я вижу его в chrome), но он не будет установлен по запросу — я также пытался использовать с до промежуточного ПО
$this->after(function(Request $request, Response $response) {
$response->headers->set("X-token","2");
$request->headers->set("X-token","2");
});
Любые предложения о том, как я могу добиться этого? Итак … аутентификация без сохранения состояния с использованием заголовков для нескольких сервисов в обычном (Silex:)) php без сохранения токена в файлах cookie или сеансах (шлюз api)?
Я не уверен, что он ответит на ваш вопрос, но вы могли бы взглянуть на механизм аутентификации WSSE, он не имеет состояния и работает с заголовками, поэтому он может быть тем, что вы ищете.
В официальном документе приведен пример реализации symfony2. Вот, что также хорошо объясняется Вот.
Вы можете найти github libs, который также реализует WSSE для Silex, возможно, вам стоит попробовать:
Надеюсь, что это поможет вам или другим людям, ищущим способ добиться хорошего механизма RESTful-ish / stateless в Silex, и извините, если это не то, что вы ищете.
Других решений пока нет …