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

Quarkus如何同时通过Authorization头和Cookie实现JWT身份认证?

问题根因

你配置出错的核心原因是错误覆盖了mp.jwt.token.header参数,该参数用于指定读取JWT的请求头名称,默认值为Authorization(供REST接口传递Bearer {token}使用),你将其改为Cookie后,框架会直接读取整个Cookie请求头的完整内容作为JWT解析,自然会抛出格式错误,你看到的异常就是因为整个Cookie字符串不符合JWT的分段格式要求。


可行解决方案

SmallRye JWT原生支持同时从Authorization头和指定Cookie读取JWT,无需拆分应用,也不需要全量使用JS实现UI,正确配置如下:

mp:
  jwt:
    token:
      # 保留默认的Authorization头,无需修改,供REST接口使用
      cookie: jwt # 仅需配置该参数,指定读取JWT的Cookie名称为jwt
# 移除smallrye.jwt.always-check-authorization配置,默认逻辑已支持两种读取方式的自动 fallback

配置生效后,框架的校验逻辑为:

  • 优先检查请求的Authorization头是否携带Bearer格式的JWT,存在则用该令牌校验
  • 若Authorization头无有效JWT,自动读取名称为jwt的Cookie值作为JWT校验
  • 两者都不存在时,若端点无@PermitAll注解才会抛出鉴权失败异常

Cookie读取失败排查点

如果配置后仍无法从Cookie读取JWT,按以下顺序排查:

  • 确认JWT Cookie的Path属性配置为/,确保所有路径的端点都能读取到Cookie
  • 若站点使用HTTPS,需给Cookie加上Secure属性
  • 生成Cookie时注意不要添加多余的前缀、后缀,值为纯JWT字符串即可
  • 排查是否有反向代理、Nginx等中间件过滤或修改了Cookie内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:15:05