Подтвердить что ты не робот

Аутентификация Symfony2 через сторонний API REST

Я пишу приложение с помощью Symfony2, которое будет взаимодействовать с Wordnik REST API.

В настоящее время API Wordnik не предлагает возможности OAuth, поэтому я должен принять имя пользователя и пароль, которые затем прозрачно передадут в интерфейс API.

Я хотел бы интегрировать эту аутентификацию API в систему безопасности Symfony2, но до сих пор мне не удалось определить, какой лучший путь реализации.

Я не думаю, что пользовательский поставщик правильный, потому что пароль не хранится в моей системе. Все примеры относительно пользовательских поставщиков проверки подлинности, похоже, относятся к защите части приложения как API, а не к REST API.

Мне не ясно, насколько FOSUserBundle помогает решить эту проблему.

Идеальный поток:

  • Пользователь предоставляет учетные данные.
  • Учетные данные передаются стороннему REST API
  • Если учетные данные верны:
    • Соответствующий "сторонний пользователь" Entity создается моим приложением, если оно не существует.
    • Пользователь аутентифицируется с использованием этого объекта "стороннего пользователя".

Каков наилучший способ реализовать это в контексте безопасности Symfony2?

Спасибо!

Вопросы, относящиеся:

4b9b3361

Ответ 1

вам необходимо реализовать собственный поставщик проверки подлинности, как описано в: http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html

Я не могу сказать вам, что лучший способ, но только для того, чтобы помочь вам начать: Вы создаете прослушиватель, токен, провайдер и factory.

Метод tryAuthentication слушателя принимает учетные данные, предоставленные пользователем, и создает новый токен с этим входом. В конце метода вы добавите: return $this- > authenticationManager- > authenticate ($ token);

Ваш провайдер будет использовать этот токен в методе проверки подлинности для отправки запроса API.

Для несуществующих пользователей у вас есть два варианта: - создать пользователя в методе проверки подлинности после вызова API и после того, как вы проверите, существует ли он, который, по моему мнению, НЕ является для них способом - создайте свой собственный обработчик ошибок аутентификации, который похож на https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationFailureHandler.php, но в верхней части метода onAuthenticationFailure, который вы добавляете if ($ exception instanceof UsernameNotFoundException && (null! == $token = $exception- > getToken()) && $токен экземпляра YourWordnikToken) {  // создаем этого пользователя здесь }

Это просто основная идея, как это работает... Я на IRC с прозвищем hacfi - сообщите мне, если вам нужно дальнейшее руководство