gpt4 book ai didi

jwt - 当使用 JWKS URL 验证 token 时,Keycloak 与外部身份提供者的集成失败

转载 作者:行者123 更新时间:2023-12-05 07:17:18 25 4
gpt4 key购买 nike

我正在我的 Keycloak 实例中配置一个外部身份提供者,并尝试让它使用外部 JWKS URL 验证 token 。使用从 JWKS 转换后的 PEM 工作正常,使用 URL 无效。

登录时 token 验证失败并显示以下消息:

[org.keycloak.broker.oidc.AbstractOAuth2IdentityProvider] (default task-4) Failed to make identity provider oauth callback: org.keycloak.broker.provider.IdentityBrokerException: token signature validation failed

我调试了 Keycloak 服务器以获得更多关于问题的信息,并在类 JWKSUtils 中发现了一个“问题” :

/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class JWKSUtils {
//...
public static Map<String, KeyWrapper> getKeyWrappersForUse(JSONWebKeySet keySet, JWK.Use requestedUse) {
Map<String, KeyWrapper> result = new HashMap<>();
for (JWK jwk : keySet.getKeys()) {
JWKParser parser = JWKParser.create(jwk);
if (jwk.getPublicKeyUse().equals(requestedUse.asString()) && parser.isKeyTypeSupported(jwk.getKeyType())) {
KeyWrapper keyWrapper = new KeyWrapper();
keyWrapper.setKid(jwk.getKeyId());
keyWrapper.setAlgorithm(jwk.getAlgorithm());
keyWrapper.setType(jwk.getKeyType());
keyWrapper.setUse(getKeyUse(jwk.getPublicKeyUse()));
keyWrapper.setVerifyKey(parser.toPublicKey());
result.put(keyWrapper.getKid(), keyWrapper);
}
}
return result;
}
//...
}

if失败并显示 NullPointerException因为电话 jwk.getPublicKeyUse()返回 null .

但我发现它是null因为 JWKS URL 返回没有属性 use 的单个键,根据规范这是可选的。 [https://www.rfc-editor.org/rfc/rfc7517#section-4.2]

Keycloak 只接受 JWKS URL,这些 URL 返回所有定义了 use 属性的键。但是我尝试连接的 IdP 不会在 key 中返回该属性。

鉴于这种情况,我应该向谁提交问题,IdP 还是 Keycloak?还是我在配置中做错了什么?

最佳答案

我提交了一份 issue 2019 年 8 月与 Keycloak 讨论了这个确切的问题。

他们的回答:

Consuming keys without validating alg and use is dangerous as suchKeycloak requires these to be present.

就我而言,我联系了 IdP,他们能够填充“使用”参数。如果那不是一个选项,那么您几乎无法使用您的解决方法。

关于jwt - 当使用 JWKS URL 验证 token 时,Keycloak 与外部身份提供者的集成失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58866616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com