[英]Keycloak Impersonate
我需要在 Keycloak 管理控制台之外提供模拟<\/strong>功能,这与模拟按钮非常相似。 我正在做的是调用 Keycloak REST API
第二个调用返回带有布尔值的重定向链接,并且在标头中,除了其他之外,还有 KEYCLOAK_SESSION 和 KEYCLOAK_IDENTITY cookie。
我需要以某种方式从应用程序中注销用户,在浏览器中设置这些 cookie,重定向到登录页面并以另一个用户身份登录。 我认为它的常见情况和 Keycloak 有它的奇迹模拟按钮,它做同样的事情,但我需要在管理控制台之外拥有它。 有人可以帮助解决这个问题吗? 非常感谢
这为时已晚,但如果有人仍在寻找简单的解决方案,它会有所帮助。 我们遇到了相同的用例,我们想在 Keyclaok 之外(在 OIDC 客户端中)提供模拟。 为了实现这一点,我们使用了 Keyclaok 模拟 rest API。 https://www.keycloak.org/docs-api/5.0/rest-api/index.html#_users_resource 。
请确保在调用此 API 之前向 Keycloak 登录用户提供模拟权限。 阅读以下链接的更多信息。 https://github.com/keycloak/keycloak-documentation/blob/master/securing_apps/topics/token-exchange/token-exchange.adoc#impersonation
此 API 发送完整的模拟用户详细信息作为响应,包括访问令牌、会话 cookie 和 cors 标头。 如下图。
我们利用 cors 标头 allow-credentials 并向 Keycloak 发送了一个带有“withCredentials: true”的 ajax 请求。 此选项指示浏览器用新的 cookie 替换所有 cookie。
我刚刚为我们的KC实现了此功能,我们采用的方法是使用REST api。 需要登录“超级用户”(有效的KC会话)。 然后他们可以发起模拟会话,我们选择使用用户名查找模拟对象。 一旦确认该人员存在于KC领域中,就可以为该人员创建UserSessionModel
。 然后创建一个登录cookie,我了解到KC AuthenticationManager
有一个几乎很少的方法,它创建一个登录cookie并将其附加到响应头(真的很酷)。 然后,我将凭据(超级用户)存储在cookie中,并返回带有这些cookie的响应。 return REST方法是一个非常相似的过程,它采用的参数是不同的,因为我们需要将cookie传递回来并获取超级用户ID和他的会话ID。 一旦有了这些,就可以重复第一种方法(查找用户,找到会话而不是创建新会话,除非旧会话超时),然后重定向回源。 哦,别忘了结束模拟会话。
personYouImpersonatedSessionId = session.sessions().getUserSession(RealmModel,AuthSessionId)
if(!personYouImpersonatedSessionId) {
session.sessions().removeUserSession(RealmModel,personYouImpersonatedSessionId)
}
我忘了在测试过程中这样做,并且遇到了一些问题。 我知道该帖子很旧,但是仍然有人在寻找这种类型的信息:D
我希望这有帮助
我一直在挖掘,以便为这个找到解决方案。 我终于找到了这篇文章: https ://blog.softwaremill.com/who-am-i-keycloak-impersonation-api-bfe7acaf051a。
总之,就我而言,我已经完成了:
# Getting intermediate token
curl --location --request POST 'http://localhost:8080/auth/realms/MY_REALM/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=vanilla' \
--data-urlencode 'client_secret=c41da386-b4fc-4202-b799-53196284e44f' \
--data-urlencode 'grant_type=client_credentials'
Impersonated user Access-Token
curl --location --request POST 'http://localhost:8080/auth/realms/MY_REALM/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=vanilla' \
--data-urlencode 'client_secret=c41da386-b4fc-4202-b799-53196284e44f' \
--data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
--data-urlencode 'subject_token=<ACCESS_TOKEN_FROM_PREVIOUS_STEP_2> \
--data-urlencode 'requested_token_type=urn:ietf:params:oauth:token-type:access_token' \
--data-urlencode 'requested_subject=34307875-39a6-4828-8cf0-f59f403bd51f'
curl --location --request GET 'http://localhost:8090/todos' \
--header 'Authorization: Bearer <ACCESS_TOKEN_FROM_PREVIOUS_STEP_3>'
注意:必须为交换令牌启用 Keycloak Server: 未实现 Keycloak 模拟 API
我正面临通过自定义 REST API 模拟的问题 - 在我的情况下,我看到 Cookie 没有创建 - 你能帮我解决这个问题吗?
admin\/realms\/{realm}\/users\/{id}\/impersonation 。
升级到 Keycloak 16.0 - 模拟不起作用 - KEYCLOAK_IDENTITY 和 KEYCLOAK_SESSION Cookie 未创建<\/a>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.