idp 使用 keycloak 发起 SSO

vsa*_*ram 7 single-sign-on keycloak idp

该问题属于基于 SAML 的 IDP 发起的 SSO 领域。作为 POC,我有两个 keycloak 实例,例如 keycloak1 和 keycloak2。我想实现以下目标:

  1. 身份验证将在 keycloak1 上完成

  2. 然后 keycloak1 定向到 keycloak2 以访问 keycloak2 客户端应用程序。

为此,

a) 在realm1 下的keycloak1 处创建saml 客户端。设置IdP initiated SSO Name为一些不带空格的名称)--> 说,keycloakclientsaml. 在 Fine Grain SAML Endpoint Configuration 部分中,对于断言消费者服务 POST 绑定 URL -->http://<keycloak2:port>/auth/realms/realm2/broker/saml/endpoint/clients/keycloakclientsaml

https://www.keycloak.org/docs/latest/server_admin/index.html#idp-initerated-login

b) 单击上面创建的 saml 客户端 --> 安装 --> 导出 SAML 元数据 IDPSSODescriptor 并保存为 saml-metadata.xml (例如)。

c) 在keycloak1中添加一个用户,比如user1/user@123

d) 在 keycloak2 中,创建 IDP(“身份提供商”选项卡)。导入上面导出的 saml-metadata.xml 并保存。

e) 在浏览器中,http://<keycloak1>/auth/realms/realm1/protocol/saml/clients/keycloakclientsaml 提示输入用户名/密码,为 user1 提供凭据

f) 浏览器中的 URL 现在更改为

http://<keycloak2:port>/auth/realms/realm2/broker/saml/endpoint/clients/keycloakclientsaml

在 keycloak2 实例中,我收到以下错误:

09:20:46,775 INFO [org.keycloak.saml.validators.ConditionsValidator] (default task-6) Assertion ID_789213dd-24f9-425f-ae20-bcadef173bc6 is not addressed to this SP. 09:20:46,775 ERROR [org.keycloak.broker.saml.SAMLEndpoint] (default task-6) Assertion expired. 09:20:46,775 WARN [org.keycloak.events] (default task-6) type=IDENTITY_PROVIDER_RESPONSE_ERROR, realmId=realm2, clientId=null, userId=null, ipAddress=keycloak2, error=invalid_saml_response

有人可以帮忙吗?

  1. 上述步骤是否正确且完整。
  2. 我缺少什么

如果需要任何其他信息,请告诉我。将很乐意提供。

vsa*_*ram 5

终于成功了。

所以这是上述问题的答案:

上面粘贴的错误与断言过期有关。就我而言,这是因为 Keycloak1 的 saml 客户端中给出的 clientid 无法识别 keycloak2 的 url。它应该指向 keycloak2 领域(例如,http://<keycloak2:port>/realms/realm2 那么 SAML 响应中的条件部分在 keycloak2 代理 idp 处已验证。 (code : SAMLEndpoint.java --> handleLoginResponse method)

将该线程留在这里,为了清楚起见,下面详细给出了步骤:

a) 在realm1 下的keycloak1 处创建saml 客户端。设置IdP initiated SSO Name为一些不带空格的名称)--> 说,sso.

b) 在上述客户端的 Fine Grain SAML Endpoint Configuration 部分中,对于断言消费者服务 (ASC) POST 绑定 URL -->http://<keycloak2:port>/auth/realms/realm2/broker/saml/endpoint/clients/keycloak2samlclient

https://www.keycloak.org/docs/latest/server_admin/index.html#idp-initerated-login

b) 单击上面创建的 saml 客户端 --> 安装 --> 导出 SAML 元数据 IDPSSODescriptor 并保存为 saml-metadata.xml (例如)。

c) 在keycloak1中添加一个用户,比如user1/user@123

d) 在 keycloak2 上,创建一个 IDP(身份提供商选项卡,名称为 saml(请参阅 ASC url)。导入上面导出的 saml-metadata.xml 并保存。

e) 在 keycloak2 上,创建一个 saml 客户端,并在 IP 发起的 SSO url 中将名称指定为keycloak2clientsaml

f) 在浏览器中,http://<keycloak1>/auth/realms/realm1/protocol/saml/clients/sso 提示输入用户名/密码,为 user1 提供凭据