Jose4j:无法为 JWS 找到合适的验证密钥 header
Jose4j: Unable to find a suitable verification key for JWS w/ header
验证失败,因为 key_ops 不符合 SelectorSupport
中静态方法 filterForInboundSigned(JsonWebSignature jws)
创建的 SimpleJwkFilter
的条件。 public 键看起来像这样:
{
"kid": "xxx",
"use": "sig",
"key_ops": [
"sign"
],
"kty": "xxx",
"e": "xxx",
"n": "xxx"
}
根据 SimpleJwkFilter
"key_ops" 必须为空或包含值 "verify" 才能匹配条件。
有没有办法在 jose4j 中自定义此行为?也许跳过 "key_ops"?
的验证
如果您正在使用 HttpsJwksVerificationKeyResolver
,您可以拥有 HttpsJwks
的简单小子类,它会在过滤器看到每个 JWK 之前取消设置 "key_ops"。看起来像这样:
class MyHttpsJwks extends HttpsJwks
{
public MyHttpsJwks(String location)
{
super(location);
}
@Override
public List<JsonWebKey> getJsonWebKeys() throws JoseException, IOException
{
List<JsonWebKey> jsonWebKeys = super.getJsonWebKeys();
for (JsonWebKey jwk : jsonWebKeys)
{
jwk.setKeyOps(null);
}
return jsonWebKeys;
}
}
然后像new HttpsJwksVerificationKeyResolver(new MyHttpsJwks("https://bad.example.com/jwks"));
一样实例化解析器
如果您正在使用 JwksVerificationKeyResolver
,您可以在用它实例化解析器之前对 JsonWebKey 列表做同样的事情。如果您直接使用 VerificationJwkSelector
或 SimpleJwkFilter,列表中的类似预处理也将起作用。
FWIW,根据 RFC7517,"use" 和 "key_ops" 参数不应一起使用,如果一起使用,它们应该传达相同的含义。我会争辩说,有问题的 JWK 不尊重这一点,因为 "sign" 的 "key_ops" 表示密钥可用于计算数字签名,而 "sig" 的 "use"表示该密钥一般可用于数字签名操作(签名或验证)。
验证失败,因为 key_ops 不符合 SelectorSupport
中静态方法 filterForInboundSigned(JsonWebSignature jws)
创建的 SimpleJwkFilter
的条件。 public 键看起来像这样:
{
"kid": "xxx",
"use": "sig",
"key_ops": [
"sign"
],
"kty": "xxx",
"e": "xxx",
"n": "xxx"
}
根据 SimpleJwkFilter
"key_ops" 必须为空或包含值 "verify" 才能匹配条件。
有没有办法在 jose4j 中自定义此行为?也许跳过 "key_ops"?
的验证如果您正在使用 HttpsJwksVerificationKeyResolver
,您可以拥有 HttpsJwks
的简单小子类,它会在过滤器看到每个 JWK 之前取消设置 "key_ops"。看起来像这样:
class MyHttpsJwks extends HttpsJwks
{
public MyHttpsJwks(String location)
{
super(location);
}
@Override
public List<JsonWebKey> getJsonWebKeys() throws JoseException, IOException
{
List<JsonWebKey> jsonWebKeys = super.getJsonWebKeys();
for (JsonWebKey jwk : jsonWebKeys)
{
jwk.setKeyOps(null);
}
return jsonWebKeys;
}
}
然后像new HttpsJwksVerificationKeyResolver(new MyHttpsJwks("https://bad.example.com/jwks"));
如果您正在使用 JwksVerificationKeyResolver
,您可以在用它实例化解析器之前对 JsonWebKey 列表做同样的事情。如果您直接使用 VerificationJwkSelector
或 SimpleJwkFilter,列表中的类似预处理也将起作用。
FWIW,根据 RFC7517,"use" 和 "key_ops" 参数不应一起使用,如果一起使用,它们应该传达相同的含义。我会争辩说,有问题的 JWK 不尊重这一点,因为 "sign" 的 "key_ops" 表示密钥可用于计算数字签名,而 "sig" 的 "use"表示该密钥一般可用于数字签名操作(签名或验证)。