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
Другие вопросы по тегам