java - key 斗篷模仿

标签 java session cookies keycloak impersonation

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

  1. 获取access_token,(auth/realms/master/protocol/openid-connect/token)
  2. 然后解析为另一个调用来模拟用户 admin/realms/{realm}/users/{id}/impersonation 。

第二个调用返回带有 boolean 值的重定向链接,并且 header 中除其他之外还有 KEYCLOAK_SESSION 和 KEYCLOAK_IDENTITY cookie。

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

最佳答案

我刚刚为我们的 KC 实现了此功能,我们采用的方法是使用 REST api。 “ super 用户”需要登录(有效的 KC session )。然后他们可以发起模拟 session ,我们选择使用用户名来查找模拟者。一旦您验证该人存在于 KC 领域中,您就可以为该人创建一个 UserSessionModel。然后创建一个登录 cookie,我了解到 KC AuthenticationManager 有一个几乎很小的方法来创建登录 cookie 并将其附加到响应 header (真的很酷)。然后我将我的凭据( super 用户)存储在 cookie 中,并返回附加了这些 cookie 的响应。返回 REST 方法是一个非常相似的过程,它采用的参数不同,因为我们需要传回 cookie 并获取 super 用户 id 和他的 session id。一旦你有了这些,你只需重复第一种方法(查找用户,查找 session 而不是创建新的,除非旧 session 超时),重定向回原点。哦,也不要忘记结束模拟 session 。

personYouImpersonatedSessionId = session.sessions().getUserSession(RealmModel,AuthSessionId)
if(!personYouImpersonatedSessionId) {
      session.sessions().removeUserSession(RealmModel,personYouImpersonatedSessionId)
}

我在测试期间忘记这样做,并且遇到了一些问题。我知道这篇文章很旧,但仍有人在寻找此类信息:D

希望这有帮助

关于java - key 斗篷模仿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52542309/

相关文章:

authentication - 没有身份验证的免费有限数字订阅如何工作?

java - 如何从媒体播放器创建音频文件

java - 如何从 RAW 文件夹而不是 SDCARD 加载 mp3 文件

java - JOpenDocument:空白行和单元格的问题

java - 作用域 bean 应如何在 Hazelcast 中触发 session 创建

java - 如何在 spring mvc 拦截器中验证 session

javascript - 如何为一个cookie设置多个键值对?

c# - 由 ASP.NET Web 应用程序设置的 Cookie 有多安全?

java - 如何使用 Kotlin 和 jackson ObjectMapper 从 json 中删除属性

javascript - Socket.IO,导航器选项卡出现问题