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

如何在多个Flask应用之间共享JWT Access Token

解决方案

首先明确报错原因:Missing claim: identity 说明服务在JWT的payload中找不到名为identity的身份声明字段,该问题在跨应用使用flask-jwt-extended时,90%以上是由版本差异或JWT配置未完全对齐导致的,可按以下步骤排查修复:

步骤1:统一flask-jwt-extended版本或对齐身份声明配置

flask-jwt-extended的3.x和4.x大版本存在核心默认配置差异:

  • 3.x版本默认的身份声明字段为 identity,对应配置项 JWT_IDENTITY_CLAIM = "identity"
  • 4.x版本默认的身份声明字段为 sub,对应配置项 JWT_IDENTITY_CLAIM = "sub"

如果三个服务安装的flask-jwt-extended大版本不同,就会出现auth服务生成的token里身份字段名和其他服务校验的字段名不匹配的问题。
可先在三个服务的运行环境分别执行以下命令查看版本:

pip show flask-jwt-extended

修复方案二选一即可:

  • 把三个服务的flask-jwt-extended统一升级/降级到同一个大版本
  • 给三个服务都加上统一的身份声明配置,比如统一指定用identity字段:
# 三个服务的配置都加上这一行
JWT_IDENTITY_CLAIM = "identity"

步骤2:校验全量JWT配置一致性

除了你已经确认的SECRET_KEY和JWT_SECRET_KEY外,还需要确认三个服务的以下JWT配置完全相同:

  • JWT_ALGORITHM:签名算法必须一致,默认是HS256,如果你修改过必须三个服务同步
  • JWT_ENCODE_AUDIENCE/JWT_DECODE_AUDIENCE:如果配置了aud受众声明,必须完全对齐
  • JWT_ISSUER:如果配置了iss签发者声明,必须完全相同

步骤3:校验JWT payload内容

你可以把auth服务生成的access token复制到本地解码,查看payload中的字段:

如果payload中没有identity字段,说明auth服务的JWT_IDENTITY_CLAIM配置不是identity,把三个服务的该配置统一修改为payload中存储身份的字段名即可
如果payload中存在identity字段,说明你的service服务解码失败,重新校验密钥是否存在大小写、前后空格等差异,确认签名算法一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:06:02