我需要在Keycloak控制台之外提供模拟功能,这个功能非常类似于模拟按钮。我所做的是调用Keycloak REST
第二个调用是使用布尔值返回重定向链接,在标头中除了其他调用之外,还有KEYCLOAK_SESSION和KEYCLOAK_IDENTITY cookie。
我需要以某种方式从应用程序中注销用户,在浏览器中设置那些cookie,执行重定向登录页面,并以另一个用户的身份登录。我认为它的共同情况和密钥披风有它的奇迹模拟按钮,这也是这样做的,但我需要有它以外的管理控制台。有人能帮忙解决这个问题吗?非常感谢
发布于 2019-08-01 15:53:22
我刚为KC实现了这个特性,我们采用的方法是使用REST,需要登录“超级用户”(有效的KC会话)。然后,他们可以启动一个模拟会话,我们选择使用用户名找到模拟。一旦验证了KC领域中的person存在,就可以为此人创建一个UserSessionModel。然后创建一个登录cookie,我了解到KC AuthenticationManager有一个几乎很小的方法,它创建一个登录cookie并将其附加到响应头(非常酷)。然后,我将我的凭据(超级用户)存储在cookie中,并将响应与附加的cookie一起返回。REST方法是一个非常类似的过程,它所接受的参数是不同的,因为我们需要传回cookie并获取超级用户id和他的会话id。有了这些之后,只需重复第一个方法(查找用户,查找会话,而不是创建新的会话,除非旧会话超时),然后重定向回原点。哦,也别忘了结束模拟会话。
personYouImpersonatedSessionId = session.sessions().getUserSession(RealmModel,AuthSessionId)
if(!personYouImpersonatedSessionId) {
session.sessions().removeUserSession(RealmModel,personYouImpersonatedSessionId)
}我在测试过程中忘了这么做,并且遇到了一些问题。我知道这篇文章很旧,但是有些人仍然在寻找这类信息。
我希望这能帮到你
发布于 2021-05-25 10:56:53
这已经太晚了,无法做出回应,但如果有人仍在寻找一个简单的解决方案,这可能会有所帮助。我们遇到了同样的用例,在这个用例中,我们希望在Keycloak之外提供模拟(在OIDC客户机中)。为了实现这一点,我们使用了Keycloak模拟REST。resource。
在调用此API之前,请确保向Keycloak登录用户提供模拟权限。阅读以下链接的更多信息。apps/topics/token-exchange/token-exchange.adoc#impersonation
此API在响应中发送完整的模拟用户详细信息,包括访问令牌、会话cookie和CORS头。就像下面的图片。

我们利用CORS报头允许凭据,并用"withCredentials: true“向Keycloak发送了ajax请求。此选项指示浏览器将所有cookies替换为新cookie。
发布于 2021-08-18 19:53:04
我一直在挖掘,以便为这个问题找到一个解决办法。我终于找到了这篇文章: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 impersonation API not implemented
https://stackoverflow.com/questions/52542309
复制相似问题