php - Symfony 安全 : Auth with session or oauth

标签 php symfony-2.3 fosoauthserverbundle

我开发了一个 REST API,有两种连接方式:session 和 oauth。 基本上我的网站会用session模式,第三方软件会用oauth模式。

我设法让 session 和 oauth 模式在 symfony 中工作,但我不能让它们同时工作。

这是我的防火墙安全配置:

firewalls:
    auth_oauth_token:
        pattern:    ^/auth/oauth/v2/token
        security:   false

    api:
        pattern:    ^/api
        anonymous:  false
        fos_oauth:  true
        stateless:  true

    auth:
        pattern:    ^/
        anonymous: ~
        form_login:
            login_path: /auth/session/check
            check_path: /auth/session/login
            always_use_default_target_path: true
            default_target_path: /auth/session/check
            failure_path: /auth/session/check
            failure_forward: false
            use_forward: false
            failure_forward: false
            username_parameter: username
            password_parameter: password
            post_only: true
            remember_me: false
            require_previous_session: false
        logout:
            path: /auth/session/logout
            target: /auth/session/logged_out
            invalidate_session: false

session 处理:/auth/session。 OAuth 处理:/auth/oauth。 接口(interface):/api.

因此,使用此配置,首先使用“api”防火墙,我可以使用 token 登录。 但即使使用 session 登录,如果我不指定 token ,我也无法访问。

首先使用“auth”防火墙,我可以使用 session 表单登录。 但即使我指定了 token ,我也无法访问。

我快被这个搞疯了。我在堆栈溢出中发现了一些关于链供应商的东西,我可能需要像“链防火墙”这样的东西……如果被禁止,请检查另一个防火墙。

谢谢

最佳答案

我通过复制 api Controller 的路由来解决,所以我有一个依赖于 OAuth2 的路由 /api/method 和一个 /webapi/method 路由它依赖于标准(主)防火墙:

在 security.yml 中:

firewalls:
    api:
        pattern:    ^/api
        fos_oauth:  true
        stateless:  true

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

    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            login_path: /login
            check_path: /login_check
        logout:       true
        anonymous:    true

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

在 routing.yml 中:

acme_api:
    type: rest 
    prefix: /
    resource: "@AcmeBundle/Resources/config/routing_api.yml"

在 routing_api.yml 中:

# REST API - OAUTH Access
acme_api_users:
    resource: AcmeBundle\Controller\UsersController
    type:     rest
    defaults: {_format: json}
    prefix:   /api
    name_prefix:  api_

# REST API - Frontend Client Access 
acme_webapi_users:
    resource: AcmeBundle\Controller\UsersController
    type:     rest
    defaults: {_format: json}
    prefix:   /web-api
    name_prefix:  webapi_

关于php - Symfony 安全 : Auth with session or oauth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20377878/

相关文章:

elasticsearch - FOS Elastica——获取查询的字符串表示

symfony - 将验证组设置为 symfony 2 中的嵌入表单

symfony - 服务 “security.authentication.manager” 依赖于不存在的服务 “security.user.provider.concrete.fos_userbundle”

php - Laravel - 在子文件夹中返回 View

php - 在 Laravel 中将依赖参数传递给 App::make() 或 App::makeWith()

php - symfony2 - 从 url 中删除/web

php - PHP 上的最大上传文件大小不起作用的错误

symfony - 可捕获的 fatal error : Object of class could not be converted to string

symfony - 如何 FOSOAuthServerBundle "Logout"或者更好的是撤销 token