Java 钥匙斗篷模拟

Java 钥匙斗篷模拟,java,session,cookies,keycloak,impersonation,Java,Session,Cookies,Keycloak,Impersonation,我需要在KeyClope管理控制台之外提供模拟功能,这与模拟按钮非常相似。 我所做的是为 获取访问令牌(auth/realms/master/protocol/openid connect/token) 然后将其解析为另一个模拟用户admin/realms/{realm}/users/{id}/impersonation的调用 第二个调用返回带有布尔值的重定向链接,在头中,除了其他调用外,还有keydove_会话和keydove_标识cookies 我需要以某种方式从应用程序中注销该用户,在浏览

我需要在KeyClope管理控制台之外提供模拟功能,这与模拟按钮非常相似。 我所做的是为

  • 获取访问令牌(auth/realms/master/protocol/openid connect/token)
  • 然后将其解析为另一个模拟用户admin/realms/{realm}/users/{id}/impersonation的调用 第二个调用返回带有布尔值的重定向链接,在头中,除了其他调用外,还有keydove_会话和keydove_标识cookies


    我需要以某种方式从应用程序中注销该用户,在浏览器中设置这些cookie,重定向到登录页面,并作为另一个用户登录。我认为它的常见情况和keybeave有它的奇迹模拟按钮,它做同样的事情,但我需要有它以外的管理控制台。有人能帮助hep解决这个问题吗?非常感谢

    我刚刚为我们的KC实现了这个特性,我们采用的方法是使用RESTAPI。“超级用户”需要登录(有效的KC会话)。然后他们可以启动模拟会话,我们选择使用用户名查找模拟对象。一旦您验证该人员是否存在于KC领域中,您就可以为该人员创建一个
    UserSessionModel
    。然后创建一个登录cookie,我了解到KC
    AuthenticationManager
    有一个近乎小的方法,可以创建一个登录cookie并将其附加到响应头(非常酷)。然后,我将我的凭证(超级用户)存储在一个cookie中,并返回附加了这些cookie的响应。return-REST方法是一个非常类似的过程,它所使用的参数是不同的,因为我们需要传回cookie并获取超级用户id和他的会话id。一旦有了这些id,您只需重复第一个方法(查找用户,查找会话,而不是创建新会话,除非旧会话超时),重定向回原点。哦,也别忘了结束模拟会话

    personYouImpersonatedSessionId = session.sessions().getUserSession(RealmModel,AuthSessionId)
    if(!personYouImpersonatedSessionId) {
          session.sessions().removeUserSession(RealmModel,personYouImpersonatedSessionId)
    }
    
    我在测试过程中忘记了这样做,遇到了一些问题。我知道这个帖子很旧,但仍有人在寻找这类信息:D


    我希望这有帮助

    我刚刚为我们的KC实现了这个特性,我们采用的方法是使用RESTAPI。“超级用户”需要登录(有效的KC会话)。然后他们可以启动模拟会话,我们选择使用用户名查找模拟对象。一旦您验证该人员是否存在于KC领域中,您就可以为该人员创建一个
    UserSessionModel
    。然后创建一个登录cookie,我了解到KC
    AuthenticationManager
    有一个近乎小的方法,可以创建一个登录cookie并将其附加到响应头(非常酷)。然后,我将我的凭证(超级用户)存储在一个cookie中,并返回附加了这些cookie的响应。return-REST方法是一个非常类似的过程,它所使用的参数是不同的,因为我们需要传回cookie并获取超级用户id和他的会话id。一旦有了这些id,您只需重复第一个方法(查找用户,查找会话,而不是创建新会话,除非旧会话超时),重定向回原点。哦,也别忘了结束模拟会话

    personYouImpersonatedSessionId = session.sessions().getUserSession(RealmModel,AuthSessionId)
    if(!personYouImpersonatedSessionId) {
          session.sessions().removeUserSession(RealmModel,personYouImpersonatedSessionId)
    }
    
    我在测试过程中忘记了这样做,遇到了一些问题。我知道这个帖子很旧,但仍有人在寻找这类信息:D


    我希望这有帮助

    现在回复太迟了,但如果有人仍在寻找简单的解决方案,这会有所帮助。我们遇到了相同的用例,我们希望在Keyclaok之外(在OIDC客户机中)提供模拟。 为了实现这一点,我们使用Keyclaok模拟restapi。

    在调用此API之前,请确保向KeyClope登录用户提供模拟权限。阅读下面链接的更多信息。

    此API发送完整的模拟用户详细信息作为响应,包括访问令牌、会话cookie和cors头。如下图所示。

    我们利用cors header allow凭据,向KeyClope发送了一个ajax请求
    “withCredentials:true”。此选项指示浏览器用新的cookie替换所有cookie。

    现在响应太迟,但如果有人仍在寻找简单的解决方案,则此选项会有所帮助。我们遇到了相同的用例,我们希望在Keyclaok之外(在OIDC客户机中)提供模拟。 为了实现这一点,我们使用Keyclaok模拟restapi。

    在调用此API之前,请确保向KeyClope登录用户提供模拟权限。阅读下面链接的更多信息。

    此API发送完整的模拟用户详细信息作为响应,包括访问令牌、会话cookie和cors头。如下图所示。

    我们利用cors header allow凭据,向KeyClope发送了一个ajax请求
    “withCredentials:true”。此选项指示浏览器用新cookie替换所有cookie。

    非常感谢您的回答。这真的很有帮助。非常感谢你的回答。这真的很有帮助。