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

如何识别访问令牌是通过客户端凭证流还是授权码流生成的?

如何区分访问令牌的生成流(客户端凭证流 vs 授权码流)

一、标准化识别方式(基于JWT声明)

如果访问令牌是JWT格式,OAuth 2.0和OIDC规范定义了一些核心声明可用于区分:

  • sub声明:授权码流生成的令牌(关联用户身份)必然包含sub(用户唯一标识符);客户端凭证流的令牌仅代表客户端身份,不会携带sub字段。
  • grant_type声明:部分授权服务器会在JWT中直接包含grant_type字段,明确标注令牌是通过authorization_code还是client_credentials生成的。
  • scope声明:授权码流的scope通常包含用户相关权限(如openid、profile、email);客户端凭证流的scope一般是客户端级别的、不关联用户的权限(如service.api.read)。
  • azp/client_id声明:两者都会携带客户端标识,但授权码流的azp(授权方)会伴随用户相关声明;客户端凭证流则只有客户端相关标识,无用户字段。

二、非JWT令牌或事前未知场景的最佳实践

如果令牌是不透明(Opaque)格式,或无法直接解析JWT,可通过以下方式判断:

  • 调用令牌 introspection 端点:绝大多数合规的OAuth 2.0授权服务器都提供令牌 introspection API,传入令牌后会返回元数据,其中通常包含grant_type字段(直接告知生成流类型),以及sub、username等字段判断是否关联用户。
  • 查询授权服务器审计日志:如果是你管控的授权服务器,可查看令牌生成时的审计日志,日志中会记录生成令牌所使用的授权类型、客户端信息及(如果是授权码流)用户信息。
  • 分析令牌受众(aud):部分系统中,客户端凭证流的令牌受众是面向服务间通信的API,而授权码流的令牌受众会包含用户相关的业务服务——不过这取决于具体配置,仅作为辅助判断依据。
  • 参考令牌有效期:经验上,客户端凭证流的令牌有效期通常更长(因为客户端是可信实体,无需频繁刷新);授权码流的令牌有效期较短,配合刷新令牌使用——这是经验法则,并非标准规定。

注意事项

  • 并非所有授权服务器都会在JWT中包含grant_type声明,所以sub字段是最可靠的区分依据之一。
  • 对于不透明令牌,令牌 introspection 是唯一能准确获取生成流信息的标准化方式,因为这类令牌本身不携带任何可解析的元数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:23:25