【问题标题】:How to exclude an api route from symfony2 firewall based on method如何根据方法从 symfony2 防火墙中排除 api 路由
【发布时间】:2015-09-10 23:51:55
【问题描述】:

所以我正在使用 fosrestbundle fosuserbundle 和 LexikJWTAuthenticationBundle 构建一个 symfony2 api,当我想访问 /api/users.json 以发布新用户时,我收到 401 错误 Bad Credentials。

我尝试以这种方式在访问控制中添加一行:

- { path: post_user, role: IS_AUTHENTICATED_ANONYMOUSLY }   

但是没有用。

我也试过了:

- { path: post_user, role: IS_AUTHENTICATED_ANONYMOUSLY, methods:[POST] }   

我怎样才能只排除 post 端点?

【问题讨论】:

    标签: rest symfony fosrestbundle


    【解决方案1】:

    解决方案是创建一个新的防火墙以禁用对 url 模式的身份验证。棘手的是,安全配置还允许您选择防火墙覆盖的方法。

    只需将其添加到 security.yml 中的防火墙中即可:

    public:
                methods: [POST]
                pattern: ^/api/users
                security: false
    

    您现在可以通过 post 方法访问您的端点,并且 get put 和 delete 仍然需要您使用的任何身份验证协议 :)

    【讨论】:

    • 还有一件事 -> 如果您的防火墙部分有其他规则,例如:'main: http_basic: true',那么您的公共规则应该位于顶部,就在 firewall下方>
    【解决方案2】:

    在使用 Adel 的解决方案并在您的控制器或操作中使用 @Security Annotations 时请注意,您会收到此异常:

    令牌存储不包含身份验证令牌。一个可能的原因可能是没有为此 URL 配置防火墙。

    这可以通过将 security: false 替换为 anonymous : true 来规避。所以完整的解决方案是:

    public:
         methods: [POST]
         pattern: ^/api/users
         anonymous : true
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 2012-03-26
      • 1970-01-01
      相关资源
      最近更新 更多