Symfony搭配LexikJWT时security.yaml配置HTTP方法限制不生效
问题原因
- 防火墙的
methods参数作用是限定当前防火墙仅对指定HTTP方法的请求生效,你配置的registration防火墙仅会匹配POST /api/users的请求,GET /api/users的请求不会命中该防火墙,会向下匹配到api防火墙。 - 你配置文件中的
access_control规则全部被注释,即使api防火墙开启了JWT认证,没有规则限制/api/users路径必须登录的前提下,Symfony不会强制校验请求的JWT Token,匿名请求可以直接获取接口返回数据。
解决方案
推荐直接通过补全访问控制规则实现需求,无需修改现有防火墙配置:
- 取消
security.yaml中access_control部分的注释,新增/api/users路径的方法限制规则,最终配置如下:
access_control: - { path: ^/api/login, roles: PUBLIC_ACCESS } # 仅允许POST请求访问/api/users无需鉴权,其余请求方式需要登录 - { path: ^/api/users, methods: [POST], roles: PUBLIC_ACCESS } - { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
- 执行Symfony缓存清理命令生效配置:
php bin/console cache:clear
配置完成后,GET /api/users请求会被要求携带有效JWT Token,未携带Token会直接返回401状态码和JWT不存在的提示,POST /api/users仍可正常用于新用户注册。
内容的提问来源于stack exchange,提问作者Ryan Loche
相关产品推荐
相关产品推荐

