Symfony2 FOSOAuthServerBundle аутентифицирован, но анонимен

#symfony #anonymous #fosoauthserverbundle

#symfony #Аноним #fosoauthserverbundle

Вопрос:

Я пытаюсь использовать FOSOAuthServerBundle.

Из моего приложения для ios я правильно получаю токен из /oauth/v2/token, я вижу в своей базе данных запись в accessToken и refreshToken с правильным идентификатором пользователя.

Открывая _profile, я вижу, что я аутентифицирован, но я вошел в систему как анонимный… почему это происходит?

При попытке получить доступ к /secured/api/me я перенаправляюсь на /login path …

Кто-нибудь может мне помочь?

Вот мой security.yml

 security:
    encoders:
        FOSUserBundleModelUserInterface: sha512

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_USER

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        oauth_token:
            pattern:    ^/oauth/v2/token
            security:   false
        oauth_authorize:
            pattern:    ^/oauth/v2/auth
#            form_login:
#                provider: fos_userbundle
#                check_path: /oauth/v2/auth_login_check
#                login_path: /oauth/v2/auth_login
            anonymous: true
        api:
            pattern:    ^/api
            fos_oauth:  true
            stateless:  true
            anonymous:    true

        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
                login_path: /login
                check_path: /login_check
            oauth:
                resource_owners:
                    facebook:           "/login/check-facebook"
                    google:             "/login/check-google"
                login_path:        /login
                use_forward:       false
                failure_path:      /login

                oauth_user_provider:
                    #this is my custom user provider, created from FOSUBUserProvider - will manage the
                    #automatic user registration on your site, with data from the provider (facebook. google, etc.)
                    service: my_user_provider
            logout:       true
            anonymous:    true

        login:
            pattern:  ^/login$
            security: false

            remember_me:
                key: "%secret%"
                lifetime: 31536000 # 365 days in seconds
                path: /
                domain: ~ # Defaults to the current domain from $_SERVER

    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }
        - { path: ^/oauth/v2/auth, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/secured, role: [ IS_AUTHENTICATED_FULLY ] }
 

.

Комментарии:

1. Для вашего брандмауэра API задано значение ^/api, а для вашего контроля доступа используется ^/secure .

Ответ №1:

Я думаю, что у вас есть в вашем security.yml под api брандмауэра :

 //...

    api :

    // ...

       stateless : true

    // ...
 

Вы должны отправлять access_token при каждом запросе.

Кроме того, если вы хотите получить аутентифицированный access_token, вы должны получить его с помощью запроса с параметром de «grant_type=password». С помощью этого access_token ваш сервер будет распознавать пользователя в каждом запросе.

Что-то вроде: PROVIDER_HOST/oauth/v2/token?client_id=CLIENT_IDamp;client_secret=CLIENT_SECRETamp;grant_type=passwordamp;username=USERNAMEamp;password=PASSWORD

(источник: OAuth2 Объяснено: часть 3 — Использование OAuth2 голыми руками)