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

如何在JavaScript中生成JWK时设置key_ops参数?

问题描述

我想用JavaScript生成带指定参数的JWK,当前代码如下:

var JA = java.util;
var JWKgen = Packages.com.nimbusds.jose.jwk.gen;
var Keys = Packages.com.nimbusds.jose.jwk.KeyUse;
var ops = Packages.com.nimbusds.jose.jwk.KeyOperation;
var alg = Packages.com.nimbusds.jose.Algorithm;

var RSAKeyjwk = JWKgen.RSAKeyGenerator(3072)
.keyUse(Keys.SIGNATURE) 
.keyID(JA.UUID.randomUUID().toString())
.algorithm(alg("RS384"))
.issueTime(new Date()) 
.generate();

已成功添加keyUse、KeyId、algorithm参数,现在需要为JWK添加"key_ops":["verify"]和"ext":true属性。尝试过以下几种语法:

.keyOperations(Set(ops['VERIFY'])). 
.keyOperations(Set(ops.VERIFY))
.keyOperations(Set(ops("VERIFY")))

但出现如下错误:

TypeError: Set objects may not be constructed using "new".
TypeError: Set objects may not be constructed using "new".
Java constructor for "com.nimbusds.jose.jwk.KeyOperation" with arguments "string" not found.

求指导如何正确添加key_ops参数。

解决方案

问题根源在于:当前JavaScript环境中直接调用Set()会创建JS原生Set,但Nimbus SDK要求传入Java的Set对象;同时KeyOperation是枚举类,不能通过字符串构造实例。以下是正确实现方式:

1. 构造符合要求的key_ops集合

使用Java标准库的java.util.Collections工具类创建包含VERIFY操作的Set:

var keyOpsSet = JA.Collections.singleton(ops.VERIFY);

Collections.singleton()会返回一个只包含指定元素的不可变Java Set,完全匹配SDK的参数要求。

2. 添加ext属性

直接调用ext(true)方法即可为JWK添加ext: true属性。

完整修改后的代码

var JA = java.util;
var JWKgen = Packages.com.nimbusds.jose.jwk.gen;
var Keys = Packages.com.nimbusds.jose.jwk.KeyUse;
var ops = Packages.com.nimbusds.jose.jwk.KeyOperation;
var alg = Packages.com.nimbusds.jose.Algorithm;

var keyOpsSet = JA.Collections.singleton(ops.VERIFY);

var RSAKeyjwk = JWKgen.RSAKeyGenerator(3072)
.keyUse(Keys.SIGNATURE) 
.keyID(JA.UUID.randomUUID().toString())
.algorithm(alg("RS384"))
.issueTime(new Date())
.keyOperations(keyOpsSet)
.ext(true)
.generate();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:25:37