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

从Okta获取Access Token遇JWK要求,求Java生成及Okta配置步骤

Okta服务应用:Java生成JWK及控制台配置指南

一、Java生成JWK步骤

使用Nimbus JOSE + JWT库实现,步骤如下:

  1. 添加Maven依赖
<dependency>
    <groupId>com.nimbusds</groupId>
    <artifactId>nimbus-jose-jwt</artifactId>
    <version>9.37.3</version> <!-- 建议使用最新稳定版本 -->
</dependency>
  1. 编写生成JWK的代码
    生成RSA密钥对并转换为标准JWK格式,包含Okta要求的核心字段:
import com.nimbusds.jose.jwk.RSAKey;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;

public class JWKGenerator {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        // 生成2048位RSA密钥对(推荐用4096位提升安全性)
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
        keyPairGen.initialize(2048);
        KeyPair keyPair = keyPairGen.generateKeyPair();

        // 构建JWK,设置必要属性
        RSAKey jwk = new RSAKey.Builder(keyPair.getPublic())
                .privateKey(keyPair.getPrivate())
                .keyID(UUID.randomUUID().toString()) // 唯一密钥标识kid
                .keyUse(com.nimbusds.jose.jwk.KeyUse.SIGNATURE) // 用途为签名
                .algorithm(com.nimbusds.jose.JWSAlgorithm.RS256) // 指定签名算法
                .build();

        // 输出完整JWK JSON(公钥部分用于上传Okta,私钥需自行妥善保管)
        System.out.println(jwk.toJSONString());
        // 若仅需公钥JWK,使用:jwk.toPublicJWK().toJSONString()
    }
}

二、Okta管理控制台配置方法

  1. 登录Okta管理控制台,找到你创建的服务应用(Service App)。
  2. 进入应用的General标签页,修改Client Authentication配置:
    • 将默认的Client Secret切换为Private Key JWT(这是系统要求传入JWK的核心原因,当前应用认证方式为私钥JWT模式)。
  3. 配置JWK:
    • 在Client Authentication下方的JWKS区域,选择Upload JSON,上传你生成的公钥JWK(或包含公钥的JWKS格式JSON);
    • 若有托管JWKS的公共端点,也可选择Provide URI并填入对应地址。
  4. 确认应用的Grant Types已勾选Client Credentials,保存配置。

三、关键注意事项

  • 生成JWK时的kid需唯一,后续请求令牌时签名JWT必须使用相同的kid,Okta会通过该字段匹配对应公钥。
  • 切换到私钥JWT认证后,请求令牌不再使用Client Secret,需用私钥签名JWT作为client_assertion参数传入,同时指定client_assertion_type为urn:ietf:params:oauth:client-assertion-type:jwt-bearer。
  • 若之前报错是JWK格式问题,检查生成的JWK是否包含kty(值为RSA)、e、n、kid这些必填字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:43:38