1

我正在尝试使用 FOSOAuthServerBundle。

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

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

尝试访问 /secured/api/me 时,我被重定向到 /login 路径...

有人可以帮助我吗?

这是我的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 ] }

.

4

1 回答 1

0

我认为您的 security.yml 中有防火墙“api”:

//...

    api :

    // ...

       stateless : true

    // ...

您必须在每个请求上发送 access_token。

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

类似于:PROVIDER_HOST/oauth/v2/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=password&username=USERNAME&password=PASSWORD

(来源:OAuth2 解释:第 3 部分 - 用你的双手使用 OAuth2

于 2015-04-25T11:56:20.133 回答