这个问题属于基于 SAML 的 IDP 发起的 SSO 领域。作为 POC,我有两个 keycloak 实例,比如 keycloak1 和 keycloak2。我想实现以下目标:
身份验证将在 keycloak1 完成
keycloak1 然后指向 keycloak2 以访问 keycloak2 客户端应用程序。
为此,
a) 在 realm1 下的 keycloak1 上创建一个 saml 客户端。设置为不带IdP initiated SSO Name
空格的名称)-> 说,keycloakclientsaml
. 在 Fine Grain SAML Endpoint Configuration 部分中,对于 Assertion Consumer Service POST Binding URL -->http://<keycloak2:port>/auth/realms/realm2/broker/saml/endpoint/clients/keycloakclientsaml
(https://www.keycloak.org/docs/latest/server_admin/index.html#idp-initiated-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
有人可以在这里帮忙。
- 以上给出的步骤是否正确且完整。
- 我错过了什么
如果需要任何其他信息,请告诉我。很乐意提供。