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

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

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

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

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

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

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

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

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

Благодаря!

Связанные вопросы:

  • Проблемы с настройкой аутентификации пользователей внешним API на Symfony2

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

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

Метод 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 ()) && $ token instanceof YourWordnikToken) {// создаем этого пользователя здесь}

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