Symfony2 FOSOAuthServerBundle经过身份验证但匿名

时间:2014-06-28 10:15:07

标签: symfony anonymous fosoauthserverbundle

我正在尝试使用FOSOAuthServerBundle。

从我的ios应用程序中,我正确地从/ oauth / v2 / token获取令牌,我可以在我的数据库中看到AccessToken和RefreshToken中的条目以及正确的user_id。

打开_profile,我可以看到我已通过身份验证但我以匿名身份登录... 为什么会这样?

当试图访问/ secured / api / me时,我被重定向到/ login path ...

有人可以帮助我吗?

这里是我的security.yml

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: 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 个答案:

答案 0 :(得分:0)

我认为你的security.yml中有防火墙'api':

//...

    api :

    // ...

       stateless : true

    // ...

您必须在每次请求时发送access_token。

此外,如果您想获得经过身份验证的access_token,则必须通过带有de参数“grant_type = password”的请求来获取它。 使用此access_token,您的服务器将识别每个请求中的用户。

像: PROVIDER_HOST /的OAuth / V2 /令牌的client_id = CLIENT_ID&安培; client_secret = CLIENT_SECRET&安培; grant_type =密码&安培;用户名= USERNAME&安培;密码= PASSWORD

(来源:OAuth2 Explained: Part 3 - Using OAuth2 With Your Bare Hands