Keycloak身份验证

时间:2018-03-08 23:17:03

标签: keycloak

我有一个关于Keycloak和获取访问令牌的问题。

我在keycloak中设置了两个不同的应用程序作为2个不同的客户端。 两者都使用相同的LDAP(Active Directory)服务器进行身份验证,这在keycloak中设置为用户联合。

用户使用keycloak登录页面登录applicationA。 现在,用户想要点击其网页上的按钮打开applicationB。

单击按钮,应用程序A应该可以检索 来自keycloak的访问令牌并使用它来启动applicationB。

但不应该要求它再次登录keycloak。

收到令牌后,它应该能够使用令牌启动applicationB。 ApplicationB应检查传递的令牌的有效性 并从keycloak服务器检索用户详细信息。

实现此目的的方法是什么

3 个答案:

答案 0 :(得分:0)

在这种情况下,为什么两个应用程序需要2个客户端?您可以传递登录应用程序A时生成的相同令牌并对其进行验证。

答案 1 :(得分:0)

我没有您的精确设置,所以如果没有进一步的信息我就无法清除它,但您是否尝试过Authentication -> Flows -> Browser and disable cookies

答案 2 :(得分:0)

您必须确定哪种类型的应用程序是ApplicationA(AA)和ApplicationB(AB)。在OIDC中,所有应用程序可以分为两种类型:

  1. 可以从密钥斗篷获取令牌的应用程序(通过标准,隐式或Direct_grant流)。
  2. 从传入请求中获取令牌的应用程序(通常是纯后端,在Keycloak术语中为“仅承载者”)。例如,他们可以使用承载方案Authorization: Bearer {jwt_access_token}
  3. 从Authorization标头中提取AccessToken。

因此,在您的情况下,我想AA应该是类型1的应用程序,而AB应该是仅承载(类型2)的应用程序,因此密钥斗篷中应该有2个客户端设置。典型流程为:

  1. 列表项
  2. 用户打开AA
  3. AA将用户重定向到Keycloak
  4. 用户登录密钥库(现在他在浏览器中没有密钥库sso cookie)
  5. Keycloak将用户重定向到AA(带有code=..之类的查询参数集)
  6. AA使用重定向请求中的code值,并通过对Keycloak的 backchannel 请求将其交换为令牌对
  7. AA现在可以使用授权标头中的访问令牌对AB执行请求(请注意,AB不需要对Keycloak进行任何其他请求来检查令牌的有效性)
  8. 请注意,要定期刷新令牌对是机管局的责任

还要签出管理控制台应用程序(通过浏览器开发者控制台进行跟踪请求)。那实际上是两个OIDC客户端:管理UI是第一种类型的应用程序,后端是第二种类型的应用程序(仅承载者)