You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony6+Sonata环境下API接口401:JWT Token未找到问题

排查Symfony API Platform JWT认证"Token not found"问题

1. 核对security.yaml核心配置

重点检查以下关键部分:

  • 防火墙规则:确保API端点所在防火墙开启无状态模式,并正确关联JWT认证器
    security:
      firewalls:
        api:
          pattern: ^/api
          stateless: true
          entry_point: jwt
          authenticators:
            - lexik_jwt_authentication.jwt_authenticator
        # Sonata Admin的防火墙配置保持原有逻辑
        admin:
          pattern: ^/admin
          # 你的Sonata认证相关配置
    
  • 访问控制优先级:确保登录接口允许匿名访问,其他API需要认证,且规则顺序正确(Symfony匹配第一个符合条件的规则)
    access_control:
        - { path: ^/api/app_users/auth, roles: PUBLIC_ACCESS } # 登录接口放开
        - { path: ^/api, roles: IS_AUTHENTICATED_FULLY } # 其余API需认证
    
  • 用户提供者配置:确认关联了正确的用户实体,避免认证时无法找到用户
    providers:
        app_user_provider:
          entity:
            class: App\Entity\AppUser
            property: email
    

2. 验证请求头的准确性

  • 确认请求头格式为Authorization: Bearer <令牌内容>,注意Bearer后必须有一个空格,无多余空格或换行
  • curl测试命令示例:
    curl -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." https://你的域名/api/目标端点
    
  • 查看var/log/dev.log,搜索Authorization关键字,确认请求头未被服务器或代理拦截

3. 确认路由匹配逻辑

运行php bin/console debug:router,检查目标API端点的路由前缀是否匹配api防火墙的pattern(如^/api),避免请求误匹配到其他防火墙(如Admin防火墙)

4. 调试JWT认证流程

  • 开启Symfony开发环境调试模式,查看完整的错误堆栈跟踪,确认JWT认证器是否被触发
  • 可在lexik_jwt_authentication.jwt_authenticator的getCredentials方法中添加日志或Xdebug断点,验证是否接收到Authorization头

5. 检查Token有效性

  • 通过jwt.io验证Token的exp(过期时间)、sub(用户ID)、roles字段是否正确
  • 核对lexik_jwt_authentication.yaml中的token_ttl配置,确认Token未过期

内容的提问来源于stack exchange,提问作者Nicolas FRUGIER

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:42:51