如何使用 Java API 从 keycloak 获取用户的名字、姓氏和属性?

Posted

技术标签:

【中文标题】如何使用 Java API 从 keycloak 获取用户的名字、姓氏和属性?【英文标题】:How can I get a user's first, last name, and attribute from keycloak with the Java API? 【发布时间】:2019-02-16 04:31:09 【问题描述】:

在给定用户和密码的情况下,我可以使用 Java API 代码从 keycloak 获取令牌:

 AccessTokenResponse tokenresponse = authzClient.obtainAccessToken(user, password);

如何从 Keycloak 中获取该用户的名字、姓氏以及其他属性?比如身份证?

【问题讨论】:

this 呢? 非常感谢您的链接!这些是 REST 调用吗? 我希望这些类的名称如此。至少其中一些应该是。 有没有不依赖 REST 的直接方法? 什么是“直接”方式?您的用户数据是否存储在本地?如果是,为什么要依赖 keycloak 而不仅仅是查询数据存储区? 【参考方案1】:

我使用的代码只是从AccessToken 获取信息。这取自 JAX-RS 服务,但不清楚您是如何尝试访问它的。也许它仍然可以给你一些想法。

@Path("/something")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response aMethod(@Context SecurityContext securityContext) 
    Principal principal = securityContext.getUserPrincipal();

    KeycloakPrincipal<KeycloakSecurityContext> keycloakPrincipal = (KeycloakPrincipal<KeycloakSecurityContext>) principal;

    AccessToken accessToken = keycloakPrincipal.getKeycloakSecurityContext().getToken();

    // first name
    accessToken.getGivenName()
    // last name
    accessToken.getFamilyName();
    // email
    accessToken.getEmail();
    // roles
    accessToken.getRealmAccess().getRoles();

【讨论】:

您使用的是哪个 AccessToken?我正在使用 org.keycloak.representations.AccessTokenResponse 并且它没有像您正在使用的方法,并且令牌本身只是一个字符串。 当然,你的想法是有道理的!如果可以的话,我想这样做。 很抱歉 - 我已经更新了帖子,提供了更多信息。

以上是关于如何使用 Java API 从 keycloak 获取用户的名字、姓氏和属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 java api 在 keycloak 中设置自定义用户属性

如何通过 Keycloak Java API 根据资源类型发出授权请求?

如何使用 httppost/rest-api 从 keycloak 获取用户列表

如何在不使用 rest admin api 的情况下以编程方式(java)更新 keycloak 的用户详细信息?

如何从 Keycloak REST API 获取用户?

如何验证从反应 SPA 中的 keycloak 检索的 nodejs express api 的访问令牌?