gpt4 book ai didi

java - 使用 Keycloak 作为身份代理和 Okta 作为身份提供者的 Saml 设置不起作用

转载 作者:行者123 更新时间:2023-12-01 18:28:18 26 4
gpt4 key购买 nike

我在我的应用程序中使用 keycloak(版本 8.0.1)作为身份代理。我已经按照本博客 https://ultimatesecurity.pro/post/okta-saml/ 中的指定设置了 keycloak/okta 之间的 saml 集成。

我还有一个示例应用程序,用于测试此集成,该应用程序来自此博客 https://scalac.io/user-authentication-keycloak-1

当 okta 重定向回 keycloak 时,我遇到了问题。来自 okta 的响应成功,但是在收到响应时,keycloak 会查看 KC_RESTART cookie 并尝试在 JWT 中查找在该 cookie 中编码的 child ,但找不到匹配项并引发以下异常,

19:26:00,581 DEBUG [org.keycloak.jose.jws.DefaultTokenManager] (default task-1) Failed to decode token: org.keycloak.common.VerificationException: Key not found
at org.keycloak.crypto.ServerMacSignatureVerifierContext.getKey(ServerMacSignatureVerifierContext.java:31)
at org.keycloak.crypto.ServerMacSignatureVerifierContext.<init>(ServerMacSignatureVerifierContext.java:25)
at org.keycloak.crypto.MacSecretSignatureProvider.verifier(MacSecretSignatureProvider.java:39)
at org.keycloak.jose.jws.DefaultTokenManager.decode(DefaultTokenManager.java:94)
at org.keycloak.protocol.RestartLoginCookie.restartSession(RestartLoginCookie.java:146)
at org.keycloak.services.resources.SessionCodeChecks.restartAuthenticationSessionFromCookie(SessionCodeChecks.java:376)
at org.keycloak.services.resources.SessionCodeChecks.initialVerifyAuthSession(SessionCodeChecks.java:197)
at org.keycloak.services.resources.SessionCodeChecks.initialVerify(SessionCodeChecks.java:204)
at org.keycloak.services.resources.IdentityBrokerService.parseSessionCode(IdentityBrokerService.java:1027)
at org.keycloak.services.resources.IdentityBrokerService.parseEncodedSessionCode(IdentityBrokerService.java:1016)
at org.keycloak.services.resources.IdentityBrokerService.authenticated(IdentityBrokerService.java:501)
at org.keycloak.broker.saml.SAMLEndpoint$Binding.handleLoginResponse(SAMLEndpoint.java:485)
at org.keycloak.broker.saml.SAMLEndpoint$Binding.handleSamlResponse(SAMLEndpoint.java:524)

我还在 keycloak 上启用了 TRACE 日志记录,并且我看到日志中打印了以下错误消息,

异常之前,

19:32:19,019 TRACE [org.keycloak.keys.DefaultKeyManager] (default task-1) Failed to find public key: realm=MyDemo kid=5a148511-021f-477d-a716-2f0f2d425d12 algorithm=HS256 use=SIG

异常后

19:32:19,021 TRACE [org.keycloak.events] (default task-1) type=IDENTITY_PROVIDER_LOGIN_ERROR, realmId=MyDemo, clientId=null, userId=null, ipAddress=127.0.0.1, error=invalid_code, requestUri=http://localhost:8080/auth/realms/MyDemo/broker/samlokta/endpoint, cookies=[io=URgKM5wjPjr8WQdlAAAA, JSESSIONID=57782504027A376E7FD18A7F061B7225, KC_RESTART=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI1YTE0ODUxMS0wMjFmLTQ3N2QtYTcxNi0yZjBmMmQ0MjVkMTIifQ.eyJjaWQiOiJhY2NvdW50IiwicHR5Ijoib3BlbmlkLWNvbm5lY3QiLCJydXJpIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F1dGgvcmVhbG1zL015RGVtby9hY2NvdW50L2xvZ2luLXJlZGlyZWN0IiwiYWN0IjoiQVVUSEVOVElDQVRFIiwibm90ZXMiOnsic2NvcGUiOiJvcGVuaWQiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvTXlEZW1vIiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiOiJwbGFpbiIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9hdXRoL3JlYWxtcy9NeURlbW8vYWNjb3VudC9sb2dpbi1yZWRpcmVjdCIsInN0YXRlIjoiMC9mMjBkNTU4ZS00M2I0LTRkMjEtOTFlYy0xOGY0YmQzYmE0OWMifX0.Y0zN-c33soimR_JhvTex-nRKL0rZKquOhRtfdofrF-A, AUTH_SESSION_ID=e549d547-0bd0-413e-986c-361bb35ead4c.moizs-mbp, OAuth_Token_Request_State=6d9150e4-fb5f-45c9-bda5-3a042d964e4c]

查看 DefaultKeyManager.java 中的代码,似乎在 KeyProvider 中找不到 KC_RESTART cookie 中的 child 。

我需要帮助找出原因,我不确定我错过了哪一步。任何帮助将不胜感激。

        for (KeyProvider p : getProviders(realm)) {
for (KeyWrapper key : p.getKeys()) {
if (key.getKid().equals(kid) && key.getStatus().isEnabled() && matches(key, use, algorithm)) {
if (logger.isTraceEnabled()) {
logger.tracev("Found key: realm={0} kid={1} algorithm={2} use={3}", realm.getName(), key.getKid(), algorithm, use.name());
}

return key;
}
}
}

最佳答案

事实证明这是一个配置问题。所以,基本上我在 localhost 上运行 keycloak 进行测试。所以我在 localhost 上启动了它并在 keycloak 上配置了 IDP。配置 IDP 后,我导出元数据并将其导入到 Okta 中。此时,受众 URI 和响应 URI 等已导入,并以 localhost 作为主机名。经过一番摆弄后,我将两个 URI 更改为使用 127.0.0.1 作为主机名而不是 localhost,这解决了问题。

当我尝试与 PingId 集成时,我发现这可能是一个问题。 PingId 拒绝了 AuthenticationRequest,因为从 URI 派生的实体 ID 不匹配。我不太确定 keycloak 的问题是什么,但我想为其他可能遇到类似问题的人发布这个答案。

关于java - 使用 Keycloak 作为身份代理和 Okta 作为身份提供者的 Saml 设置不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60200319/

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