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

Okta Java创建JWT验证器抛出InvokerInvocationException异常问题

问题根因
  • 核心原因是OkHttp版本冲突:Okta的JWT校验SDK依赖特定版本的OkHttp客户端,而你的Grails+Spring项目中已经引入了其他版本的OkHttp,版本不匹配导致okhttp3.internal.concurrent.TaskRunner内部类加载失败,触发NoClassDefFoundError。
  • 次要可能原因是Kotlin标准库版本不兼容:OkHttp 4.x以上版本基于Kotlin实现,若项目中Kotlin标准库版本低于1.4,也会导致OkHttp内部类初始化失败。
可行解决方案

方案1:统一OkHttp版本

在项目构建配置中显式声明Okta SDK兼容的OkHttp版本,覆盖冲突版本。
Gradle配置示例:

implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.10.0'
// 同时保证kotlin版本兼容
implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.6.21'

Maven配置示例:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.squareup.okhttp3</groupId>
      <artifactId>okhttp</artifactId>
      <version>4.10.0</version>
    </dependency>
    <dependency>
      <groupId>org.jetbrains.kotlin</groupId>
      <artifactId>kotlin-stdlib</artifactId>
      <version>1.6.21</version>
    </dependency>
  </dependencies>
</dependencyManagement>

方案2:排除Okta SDK传递的OkHttp依赖

如果你的项目必须固定现有OkHttp版本,可排除Okta SDK自带的OkHttp依赖,直接使用项目现有版本:
Gradle配置示例:

implementation ('com.okta.jwt:okta-jwt-verifier-impl:0.5.7') {
    exclude group: 'com.squareup.okhttp3', module: 'okhttp'
}

方案3:改用离线JWT校验逻辑

完全跳过Okta SDK的依赖,直接拉取Okta授权服务器的公钥,用通用JWT库离线校验令牌,避免OkHttp依赖冲突:

  1. 提前从Okta授权服务器的公钥接口获取公钥列表
  2. 使用jjwt或nimbus-jose-jwt库自行实现令牌签名、有效期、发行方、受众校验逻辑,不需要额外引入OkHttp依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:30:04