在 Keycloak 中使用内部身份提供商从一个领域到另一个领域的证书错误

问题描述 投票:0回答:1

概述

按照另一个 Keycloak 身份提供商线程的答案,我设置了两个领域来将用户分开。

external realm
包含一个 Keycloak OpenID Connect
identity provider
internal realm
。在
external realm
中配置了
client
,它允许我的应用程序通过
client adapter
验证用户。

我正在使用Keycloak版本

18.0.0

配置

任何未指定的设置均为“关闭”、未设置(空白条目)或默认值。

identity provider
中配置的
external realm
具有以下设置:

  • Enabled: true
  • Store Tokens: ON
  • Trust Email: ON
  • First Login Flow: first broker login
  • Sync Mode: force
  • ODIC 设置:
    • Auth URL
      Token URL
      Logout URL
      User Info URL
      均设置为匹配的
      internal realm
      客户端
    • Client Authentication: Client secret sent as basic auth
    • Client Secret
      设置为匹配的客户端密钥
    • Issuer
      设置为
      internal realm
      URL。例如:
      https://<hostname>/auth/realms/<internalRealmName>
    • Default Scopes: openid
    • Prompt: unspecified
    • Validate Signatures: ON
    • 使用
      JWKS URL: ON
      JWKS URL
      设置为匹配的
      internal realm
      证书位置。例如:
      https://<hostname>/auth/realms/<internalRealmName>/protocol/openid-connect/certs
    • Use PKCE: ON
    • PKCE Method: S256

client
中配置的
internal realm
具有以下设置:

  • Enabled: true
  • Client Protocol: openid-connect
  • Access Type: confidential
  • Standard Flow Enabled: ON
  • Valid Redirect URIs: https://<hostname>/auth/realms/<externalRealmName>/broker/<internalRealmName>/endpoint
  • Backchannel Logout Session Required: ON
  • Credentials
    • Client Authenticator: Client Id and Secret
    • 秘密复制并设置在
      external realm
      identity provider
      配置中

问题

external realm
中存在的用户可以登录,以及配置为通过另一个单独的外部 ODIC 登录的用户
identity provider
(这不是internal realm
的身份提供者,只是一个身份提供商登录流程正在运行的示例)。

尝试通过

identity provider

 登录到 
internal realm
 的用户无法登录。登录页面显示 
Unexpected error when authenticating with identity provider

检查 Keycloak 日志,我看到以下错误:

WARN [org.keycloak.events] (default task-405) type=IDENTITY_PROVIDER_LOGIN_ERROR, realmId=<externalRealmName>, clientId=<externalRealmClientName>, userId=null, ipAddress=<removed>, error=identity_provider_login_failure, code_id=258c44bd-88fc-44a1-b93c-18225b00df49 ERROR [org.keycloak.broker.oidc.AbstractOAuth2IdentityProvider] (default task-405) Failed to make identity provider oauth callback: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
请求帮助

为什么Keycloak在使用这个

identity provider

时无法验证证书?它能够使用 
external realm
 以及另一个 
identity provider
 的 SSL 设置成功进行身份验证用于外部连接。我无法弄清楚Keycloak认证失败到底发生在哪里。

ssl keycloak keycloak-services identity-provider
1个回答
0
投票
HTTP 调用是在幕后完成的。 Keycloak 不信任身份提供者证书。

您需要将证书添加到keycloak的密钥库中。

复制身份验证流程中使用的令牌 url。将令牌粘贴到浏览器网址。

enter image description here

在浏览器中导航到令牌 URL。打开开发工具并将证书导出到*.crt(例如digicert.crt)

enter image description here

将证书加载到密钥库文件:

keytool -importcert -trustcacerts -storepass 密码 -noprompt -storetype PKCS12 -keyalg RSA -keysize 2048 -alias digicert -file digicert.crt -keystore conf/server.keystore

在 keycloak 启动时加载密钥库文件: --spi-truststore-file-file=/opt/keycloak/conf/server.keystore

© www.soinside.com 2019 - 2024. All rights reserved.