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

使用okta-spring-boot-starter 2.1.2时JWT校验返回401错误问题咨询

问题根因

okta-spring-boot-starter 2.1.0及以上版本默认新增了JWT访问令牌的受众(audience)校验逻辑,2.0.0版本该校验默认关闭,你现有配置未适配该新增规则会导致令牌校验不通过,返回401错误。

解决方案

推荐方案:配置正确的audience参数

  1. 先登录Okta后台,进入你使用的授权服务器详情页,确认Audience字段值,Okta默认授权服务器的audience默认值为api://default,自定义授权服务器填写你自己设置的对应值即可。
  2. 在项目的application配置文件中新增audience配置:

application.yml 配置示例

okta:
  oauth2:
    audience: api://default # 替换为你实际的audience值
    issuer: https://你的Okta域名/oauth2/default # 需和后台显示的issuer完全一致,末尾不要加斜杠

application.properties 配置示例

okta.oauth2.audience=api://default
okta.oauth2.issuer=https://你的Okta域名/oauth2/default

可选临时兼容方案(不推荐,存在安全风险)

如果暂时不需要做audience校验,可自定义JwtDecoder关闭该校验,代码如下:

@Configuration
public class JwtConfig {
    @Bean
    public JwtDecoder jwtDecoder(OAuth2ResourceServerProperties properties) {
        NimbusJwtDecoder jwtDecoder = NimbusJwtDecoder.withJwkSetUri(properties.getJwt().getJwkSetUri()).build();
        // 仅保留issuer校验,关闭audience校验
        jwtDecoder.setJwtValidator(JwtValidators.createDefaultWithIssuer(properties.getJwt().getIssuerUri()));
        return jwtDecoder;
    }
}

额外排查点

如果配置完成后依然报错,可检查以下两项:

  • 确认你使用的是Okta授权服务器签发的访问令牌,而非ID令牌,ID令牌仅用于身份认证,不能用于API鉴权
  • 如果使用的是Okta账户级授权服务器(非自定义/默认授权服务器),audience需配置为你的Okta客户端ID,同时新增配置okta.oauth2.groups-claim=groups适配权限声明解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:06:03