Keycloak 冒充

我需要在 Keycloak 管理控制台之外提供模拟功能,非常类似于模拟按钮。我正在做的是调用 Keycloak REST API

  1. 获取 access_token, (auth/realms/master/protocol/openid-connect/token)

  2. 然后将其解析为另一个调用以模拟用户 admin/realms/{realm}/users/{id}/impersonation 。

第二个调用是返回带有布尔值的重定向链接,在标题中,除了其他之外,还有 KEYCLOAK_SESSION 和 KEYCLOAK_IDENTITY cookie。

我需要以某种方式从应用程序中注销用户,在浏览器中设置这些 cookie,重定向到登录页面并以另一个用户的身份登录。我认为它的常见情况和 Keycloak 有其神奇的模拟按钮,它的作用相同,但我需要在管理控制台之外使用它。有人可以协助解决这个问题吗?非常感谢


慕勒3428872
浏览 193回答 3
3回答

慕妹3242003

我刚刚为我们的 KC 实现了这个功能,我们采用的方法是使用 REST api。“超级用户”需要登录(有效的 KC 会话)。然后他们可以发起模拟会话,我们选择使用用户名来查找被模拟者。一旦您验证此人存在于 KC 领域中,您就可以UserSessionModel为该人创建一个。然后创建一个登录cookie,我了解到KCAuthenticationManager有一个几乎没有创建登录 cookie 并将其附加到响应标头的方法(真的很酷)。然后我将我的凭据(超级用户)存储在 cookie 中,并返回附加了这些 cookie 的响应。返回 REST 方法是一个非常相似的过程,它需要的参数不同,因为我们需要将 cookie 传递回来并获取超级用户 id 和他的会话 id。一旦你有了这些你只需重复第一种方法(查找用户,查找会话而不是创建新会话,除非旧会话超时),重定向回原点。哦也不要忘记结束模拟会话。personYouImpersonatedSessionId = session.sessions().getUserSession(RealmModel,AuthSessionId)if(!personYouImpersonatedSessionId) {      session.sessions().removeUserSession(RealmModel,personYouImpersonatedSessionId)}我在测试期间忘记了这样做,并且遇到了一些问题。我知道帖子很旧,但仍有人在寻找此类信息:D我希望这有帮助
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java