Я пишу приложение с помощью Symfony2, которое будет взаимодействовать с API- интерфейсом Wordnik REST .
В настоящее время API Wordnik не предлагает возможности OAuth, поэтому я должен принять имя пользователя и пароль, которые затем прозрачно перейдут в интерфейс API.
Я хотел бы интегрировать эту аутентификацию API в систему безопасности Symfony2, но до сих пор мне не удалось определить, какой лучший путь реализации.
Я не думаю, что пользовательский провайдер правильно, потому что пароль не хранится в моей системе. Все примеры, касающиеся поставщиков пользовательской аутентификации, по- видимому, относятся к обеспечению части приложения как API, а не к REST API.
Мне непонятно, в какой степени FOSUserBundle помогает решить эту проблему.
Идеальный поток:
Каков наилучший способ реализовать это в контексте безопасности 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 – сообщите мне, если вам нужны дальнейшие указания