使用Keycloak的IDP启动的SSO

时间:2019-02-20 11:36:45

标签: single-sign-on keycloak idp

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

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

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

为此,

a)在realm1下的keycloak1处创建一个saml客户端。将IdP initiated SSO Name设置为不带空格的名称)->说keycloakclientsaml。在“细粒度SAML端点配置”部分中,对于断言消费者服务POST绑定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)在密钥斗篷1中添加一个用户,例如user1 / user @ 123

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

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

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. 我想念什么

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

1 个答案:

答案 0 :(得分:0)

最后使它正常工作。

这是上述答案:

上面粘贴的错误与断言有关。在我的情况下,这是因为无法识别keycloak1的saml client中给出的clientid。它应该指向keycloak2领域(例如http://<keycloak2:port>/realms/realm2 然后,将在keycloak2代理idp处对SAML响应中的条件部分进行验证。 (code : SAMLEndpoint.java --> handleLoginResponse method)

为了清楚起见,将线程保留在此处,以下详细给出了步骤:

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

b)在上述客户端的“细粒度SAML端点配置”部分中,对于断言消费者服务(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-initiated-login

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

c)在密钥斗篷1中添加一个用户,例如user1 / user @ 123

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

e)在keycloak2上,创建一个saml客户端,并在IP启动的SSO URL中将名称命名为keycloak2clientsaml

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