当前位置: 首页 > 知识库问答 >
问题:

如何使用Keycloak restendpoint获取用户在Keycloak中的最后登录会话详细信息?

西门逸仙
2023-03-14

如何使用Keycloak restendpoint获取用户在Keycloak中的最后登录会话详细信息?

builder.append(OAuth2Constants.AUDIENCE+"="+clientId+"&");
builder.append(OAuth2Constants.GRANT_TYPE+"="+OAuth2Constants.UMA_GRANT_TYPE+"&");
headers.put("Content-Type", "application/x-www-form-urlencoded");
headers.put("Authorization", "Bearer "+accessToken);

//String keycloakURL = keyCloakCFGBean.getCreateRefreshSession();
String keycloakURL="http://10.10.8.113:10004/auth/realms/{realm}/protocol/openid-connect/token";
keycloakURL = keycloakURL.replace("{realm}", realmName);

URL url = new URL(keycloakURL);
httpURLConnection  = (HttpURLConnection) url.openConnection();
httpURLConnection.setUseCaches(false);
httpURLConnection.setDoInput(true);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
if (headers != null && headers.size() > 0) {
    Iterator<Entry<String, String>> itr = headers.entrySet().iterator();
    while (itr.hasNext()) {
        Entry<String, String> entry = itr.next();
        httpURLConnection.setRequestProperty(entry.getKey(), entry.getValue());
    }
}

outputStreamWriter = new OutputStreamWriter(httpURLConnection.getOutputStream(), StandardCharsets.UTF_8);
outputStreamWriter.write(builder.toString());
outputStreamWriter.flush();

共有1个答案

单于善
2023-03-14

所以这里有几个场景。所有这些信息都假定您在身份验证/授权请求的报头中发送了适当的承载令牌,并要求您在Keycloak领域中具有足够的管理权限。

我没有详细说明您用特定语言编写的精确代码,但希望说明清楚地说明了您需要代码做什么。

届会

所有登录

然而,我怀疑您真正想要的是查看Keycloak中存储的所有信息中的最后一次登录,而不仅仅是活动的用户会话,因此您需要为此查找领域事件。请注意,Keycloak只存储一定时间的事件,所以如果它的时间比这个时间长,那么您将找不到任何条目。您可以在领域管理控制台的事件配置页中更改事件的存储时间。

要获取所有领域事件,您可以调用这里提到的endpoint:https://www.keycloak.org/docs-api/11.0/rest-api/index.html#_getEvents(如果链接不能直接找到,请搜索“get events返回所有事件,或者根据此处列出的URL查询参数筛选它们”)。

您需要根据“type”筛选结果(即,只有“login”类型的事件),如果要检查特定用户,还需要根据该用户帐户的ID在userid上筛选结果。

您可以作为请求的一部分执行这两种筛选,以节省获取事件的完整列表并在客户端对其进行筛选的时间。若要在请求中进行筛选,请执行以下操作:

https://{server}/auth/admin/realms/{realm}/events?type=login&user={id}

然后,可以从结果JSON中获得time属性值最高的结果,该属性表示登录事件。time属性将再次是自1/1/1970以来的UNIX毫秒时间,因此一旦有了它,您可以再次将其转换为适合您的格式。

希望对你有帮助!

 类似资料:
  • 问题内容: 我尝试了这个:当isSessionValid getDetails直接否则else facebook.authorize,然后在onActivityResult中获取getDetails 当我的系统上安装了Facebook应用程序时,此方法工作正常。但是,如果未安装,我将获得一个Web视图以输入facebook凭据,并在logcat中显示登录成功,但是没有调用getDetails块。

  • 我是Spring MVC和Spring Security的新手。我已经使用Spring Security和MVC执行了登录和注册功能。我找不到任何会话管理的方法。 我想访问所有页面上的一些用户信息,如(电子邮件,姓名,id,角色等)。我想将这些保存到会话对象中,这样我就可以在任何页面上获取这些内容。 我在Spring的会议得到以下方式 但是从这个返回的对象中,我只能得到用户名和密码的详细信息。 但

  • 以下是我希望通过REST API从Keycloak检索的参数: 领域名称 领域ID 用户名 电子邮件 名字 已启用用户 是否有人使用REST API从keycloak获取这些细节,请分享REST API URL细节。

  • 我有一个struts2应用程序。在我的应用程序中,我使用 这边走。 提前致谢

  • 嗨,我尝试用InMemoryDao获取userDetailsService。但是我得不到,我试过@Autowired,@ Inject(userdailsservice,InMemoryDaoImpl,InMemoryManager...)但是我不能让它工作。 有公共类安全扩展WebSecurityC 只尝试了WebSecurityCon