【问题标题】:Symfony2 firewall Web & API authenticationSymfony2 防火墙 Web & API 认证
【发布时间】:2016-01-21 14:24:33
【问题描述】:

我正在尝试建立一个项目,我可以通过以下方式对用户进行身份验证 APIWeb 接口(登录表单)。到目前为止,我只能使用一个登录表单,即主要的Web 登录表单。我需要通过API 对它们进行身份验证,并调出使用消息自定义的 oauth 表单以通知用户授权,基本上只是一条自定义消息。像 facebook 这样的东西可能会。

在 Symfony2 安全页面上,我目前找不到需要的帮助,也找不到博客。至少不是适合我的那个。

所以完美的场景是

  1. http://url.com/web
  2. http://url.com/apiapi

我为我的用户使用 FOS 用户包,为 oauth 身份验证使用 FOS OAuth 包,为 REST API 使用 FOSRestBundle。

正如this oauth tutorial 中所解释的那样,这正是我想要实现的场景。

当我询问像http://url.com/oauth/v2/token?client_id=24_2qxtvmjv99eso8wg8sowc8c04o488og8gs8wo0osocks0wkcw0&client_secret=33ghqa2w202sooscwogw0kwwwg0gc00k8sgkkw0cgco4cg08s0&grant_type=client_credentials 这样的网址时,它会将我重定向到登录页面。据我了解,我的access_control 是错误的。

这是我的 security.yml 文件:

security:
encoders:
    FOS\UserBundle\Model\UserInterface: bcrypt

role_hierarchy:
    ROLE_USER:        [ROLE_CUSTOMER_RSS, ROLE_CUSTOMER_ASS]
    ROLE_AGENT:       ROLE_USER
    ROLE_ADMIN:       ROLE_AGENT
    ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:

    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

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

   ui_login:
            pattern: ^/
            form_login:
                login_path: fos_user_security_login
                check_path: fos_user_security_check
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
                default_target_path: /
            logout:       true
            anonymous:    true

    assets:
        pattern:  ^/(css|images|js)/
        security: false

    dev:
        pattern:  ^/(_(profiler|wdt|configurator|error))/
        security: false

access_control:
    - { path: ^/oauth/v2/auth_login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/logout, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }

    - { path: ^/, role: [ROLE_USER] }

我知道我在这里遗漏了很多东西。请帮忙。

【问题讨论】:

    标签: php api symfony oauth


    【解决方案1】:

    防火墙的顺序很重要。您现在配置它的方式,用于 url“^/”的第一个“catchall”防火墙正在捕获所有请求,因此其他防火墙未激活。应该首先定位更具体的防火墙,然后定位不太具体的防火墙。因此,ui_login 防火墙应该是最后一个定义的

    【讨论】:

    • 是的,它确实有所作为,谢谢!现在,当我转到 http://url.com/oauth/v2/auth_login 时,我得到了重定向循环。有什么帮助吗?我将在这里更新我的 security.yml。
    • 可能你需要说那个url可以匿名访问,不太确定
    • 我编辑了我的 access_control 如下:access_control: - { path: ^/oauth/v2/auth_login, role: IS_AUTHENTICATED_ANONYMOUSLY } 仍然重定向循环.. 我不明白。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多