FOSbundle + FOSOAuthServerBundle防火墙配置

时间:2015-06-15 14:14:35

标签: security symfony oauth fosuserbundle fosoauthserverbundle

我正在开发一个Symfony 2.7项目,该项目同时具有Web登录界面和API的OAuth身份验证。 我使用FOSUserBundle作为身份验证提供程序,使用FOSOAuthServerBundle来提供OAuth功能。

我正在关注与此帖相关的指南,以便使用FOSOauthServerBundle实施OAuth FOSOAuthServerBundle with FOSUserBundle - How to make it works?

我认为几乎就在那里,但安全问题阻碍了我。 我在securtiy.yml上以下列方式设置了防火墙

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: security.csrf.token_manager # Use form.csrf_provider instead for Symfony <2.4
            login_path:          fos_user_security_login
            check_path:          fos_user_security_check
            #default_target_path: app_website_index
        logout:       true
        anonymous:    true
        logout:
              path: fos_user_security_logout
              #target: index
              target: fos_user_security_login

    oauth_token:
                pattern:    ^/oauth/v2/token
                security:   false

    oauth_authorize:
        pattern:    ^/oauth/v2/auth
        # Add your favorite authentication process here
        form_login:
             provider: fos_userbundle
             csrf_provider: security.csrf.token_manager # Use form.csrf_provider instead for Symfony <2.4
             login_path:          fos_user_security_login
             check_path:          fos_user_security_check
             #default_target_path: app_website_index

    api:
        pattern:    ^/api
        fos_oauth:  true
        stateless:  true
        anonymous:  false # can be omitted as its default value

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: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] }

问题是API和OAuth防火墙都在主要的^ / 因此,当我尝试访问localhost:8000 / api / articles而未登录时,它会提醒我登录页面,而不是给我OAuth autentication错误:

{"error":"access_denied","error_description":"OAuth2 authentication required"}

例如。

或者,当我尝试访问以下资源时,我获得了访问令牌:

http://localhost:8000/app.php/api/article/?access_token=THISISMYACCESSTOKEN

我得到了fos_login而不是资源。

如果我将主防火墙修改为^ / secured /一切正常但我在网络身份验证时遇到问题。

我的应用程序的所有控制器都在/ secured / path下,所以更改主防火墙不是问题,如果我让防火墙不受保护,那么^ / pattern会有几个错误形成FOSUserBundle。我应该为login / login_check / logout操作创建一个特定的防火墙吗?从/ secured /中放置主防火墙,还是有另一种方法来排除OAuth&amp; API防火墙构成主防火墙吗?

1 个答案:

答案 0 :(得分:-1)

相当古老的问题,但我想这是由于这一行:

- { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] }

无论您拨打什么电话&#34; http://localhost:8000/app.php/api/ ...&#34;,您都会被重定向到登录页面。