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, было бы очень полезно.


person manonthemoon    schedule 27.01.2014    source источник
comment
не могли бы вы заставить его работать? не могли бы вы опубликовать рабочую конфигурацию, это может помочь мне и другим? Спасибо   -  person vishal    schedule 10.11.2014
comment
@manonthemoon, не могли бы вы предоставить конфигурацию, чтобы другие могли ее использовать? Мне бы тоже очень помогло.   -  person breq    schedule 25.11.2016


Ответы (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

См.: https://github.com/FriendsOfSymfony/oauth2-php/blob/master/lib/OAuth2/OAuth2.php#L182

Также прочитайте эту ссылку: blog.tankist.de/blog/2013/08/20/oauth2-explained-part-4-реализация-пользовательский-грант-тип- 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
person Thommas    schedule 05.02.2014
comment
См. также: developers.google.com/accounts/docs/OAuth2WebServer для потока OAuth, есть хороший рисунок для объяснения. Также еще одна прекрасная ссылка для объяснения 4 различных методов: aaronparecki.com/articles/2012/07/29/1/oauth2-simplified - person Thommas; 05.02.2014
comment
Шаг под названием «Создание нового клиента» — это, по сути, процесс регистрации FOSUserBundle для OAuth. Это не должно быть последним шагом после login_check ??? Если логин зарегистрирован... Я разрешаю ему доступ, поэтому я создаю нового клиента, и он создает новый токен доступа... Нет? - person manonthemoon; 10.02.2014
comment
Пока все отлично работает в моем проекте. Ну, технически вы можете создать клиентский объект в любое время, он не связан с пользователем, пока вы не используете клиент для создания токена, как только токен будет создан с учетными данными клиента, клиент будет генерировать токен FOSUser, связанный с Пользователь. - person Thommas; 14.02.2014
comment
Я увидел в вашем профиле, что вы из Парижа. Я француз и тоже из Парижа. Как вы думаете, мы можем обсудить FOSOAuthServerBundle по почте или по Skype, пожалуйста? Потому что у меня все еще есть трудности с интеграцией этой связки. Спасибо - person manonthemoon; 16.02.2014