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

为何Spring Authorization Server将client_id作为访问令牌的受众?

关于OAuth2访问令牌受众(audience)的疑问解答

你完全没说错——访问令牌的受众(audience)确实应该是资源服务器,代码里这么写通常是这几种情况:

  • 单一资源服务器场景:如果系统里只有一个资源服务器,且客户端只能访问它,有些团队会图省事直接用客户端ID当audience,这种做法在单一环境下能跑通,但不是标准操作。
  • 框架默认行为:Spring Security OAuth2的JwtGenerator默认逻辑可能会把客户端ID填充到audience字段,但这并不是OAuth2的最佳实践。
  • 未正确配置资源服务器标识:正常来说,你应该手动指定资源服务器的专属标识符作为audience,比如:
    claimsBuilder
        .subject(context.getPrincipal().getName())                 
        .audience(Collections.singletonList("https://your-resource-server.com/api"))                
        .issuedAt(issuedAt)
        .expiresAt(expiresAt);
    
  • 特殊授权模式例外:如果是客户端凭证授权模式,偶尔会出现令牌受众包含客户端自身的情况,但这是小众场景,授权码/密码模式这类常用场景下,受众必须指向资源服务器。

另外要注意,资源服务器验证令牌时会校验audience是否匹配自身标识,如果代码里设成客户端ID,那资源服务器的配置也得跟着改成校验客户端ID,这就偏离了OAuth2的设计初衷——访问令牌是发给资源服务器的,受众自然要明确指向它。

所以正确的做法是根据资源服务器的实际标识来设置audience,而不是用客户端ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:33:12