FOSOAuthServerBundle с FOSUserBundle - Как заставить это работать?
В настоящее время мой проект работает очень хорошо. Я использую FOSUserBundle для управления моими пользователями. Теперь я хочу реализовать OAuth, поэтому я использую FOSOAuthServerBundle. Большинство разработчиков рекомендуют этот пакет для реализации OAuth.
Я следовал за документацией FOSOAuthServerBundle. Обычно мне нужно добавить больше информации в мой security.yml, но я точно не знаю, что мне делать...
Вот мой security.yml:
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
Moodress\Bundle\UserBundle\Entity\User: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
main:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
oauth_token:
pattern: ^/oauth/v2/token
security: false
oauth_authorize:
pattern: ^/oauth/v2/auth
main:
pattern: ^/
fos_oauth: true
stateless: true
anonymous: true
Я думаю, что есть некоторая информация, чтобы добавить в брандмауэрах, может быть,??
Я действительно не знаю, как заставить работать FOSOAuthServerBundle с FOSUserBundle. Раньше, используя только FOSUserBundle, я использовал форму входа и проверку входа в FOSUserBundle. Теперь, когда я поместил все основные настройки FOSOAuthServerBundle, что мне делать дальше? Какую форму я должен использовать? Какой логин проверить? Токен автоматически создается FOSOAuthServerBundle? В документации они показывают, как создать клиента... Я должен добавить этот код в свой проект? Если да... где?:/
Я нашел эту статью в Интернете: http://blog.logicexception.com/2012/04/securing-syfmony2-rest-service-wiith.html
Я пытался реализовать это, но я не могу поверить, что нам нужно добавить все эти файлы, чтобы это работало...
Если кто-то знает, как заставить работать FOSOAuthServerBundle с FOSUserBundle, это было бы очень полезно.
1 ответ
Я только что установил этот комплект и начал играть с ним.
Я думаю, вам нужно сначала узнать больше о том, как работает аутентификация OAuth.
Таким образом, вы поймете, что механизмы FOSUserBundle не совсем такие же, как OAuth.
Ваша ссылка - лучшая информация для правильной настройки пакета.
Я использую MongoDB для хранения всех 4 необходимых документов: Client, AuthCode, RefreshToken и AccessToken
Шаг под названием "Создать нового клиента" - это, по сути, процесс "регистрации" FOSUserBundle для OAuth.
OAuth будет использовать клиента для разрешения доступа.
Основная идея OAuth состоит в том, чтобы защитить API, поэтому я предлагаю вам переключить вашу конфигурацию на анонимный: false
Тогда вы увидите сообщение:
{"error":"access_denied","error_description":"OAuth2 authentication required"}
когда вы вызываете свой API
Идея OAuth - получить токен доступа для вызова вашего API. Прочитайте это: https://web.archive.org/web/20160412061914/http://blog.tankist.de/blog/2013/07/16/oauth2-explained-part-1-principles-and-terminology/
Это когда OAuth-процесс аутентификации должен следовать.
Есть 5 основных методов для использования:
const GRANT_TYPE_AUTH_CODE = 'authorization_code';
const GRANT_TYPE_IMPLICIT = 'token';
const GRANT_TYPE_USER_CREDENTIALS = 'password';
const GRANT_TYPE_CLIENT_CREDENTIALS = 'client_credentials';
const GRANT_TYPE_REFRESH_TOKEN = 'refresh_token';
Чтобы узнать о каждом из них, найдите дополнительную документацию по OAuth RFC.
Каждый из них соответствует определенному вызову: /oauth/v2/token? Client_id = [CLIENT_ID] & response_type = code & redirect_uri = URL & grant_type = token
Cf: https://github.com/FriendsOfSymfony/oauth2-php/blob/master/lib/OAuth2/OAuth2.php
Также прочитайте эту ссылку: https://web.archive.org/web/20160503051245/http://blog.tankist.de/blog/2013/08/20/oauth2-explained-part-4-implementing-custom-grant-type-symfony2-fosoauthserverbundle/
Часть "Время для тестирования" объясняет, как использовать OAuth.
Я все еще работаю над этим.
Надеюсь, поможет.
Также эта ссылка указывает, как использовать FOSUserBundle User & UserManager, вероятно, чтобы использовать пароль grant_type: если вы аутентифицируете пользователей, не забудьте установить провайдера пользователя.
Вот пример использования провайдера пользователя FOSUserBundle: https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/blob/master/Resources/doc/index.md
# app/config/config.yml
fos_oauth_server:
...
service:
user_provider: fos_user.user_manager