如何通过ID获取其他用户信息(用户名,名字)? [Keycloak]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过ID获取其他用户信息(用户名,名字)? [Keycloak]相关的知识,希望对你有一定的参考价值。

如何根据用户ID获取用户keycloak属性(用户名,名字,电子邮件...)?我在Keycloak会话中使用的用户已经分配了角色视图 - 用户,所以我应该能够列出至少所有用户,是否有可以使用的Keycloak类?

我在这里想要实现的是避免将keycloak用户数据库复制到另一个本地数据库,但除了当前会话中的那个之外,似乎无法访问任何其他用户信息...

答案

您可以使用Admin REST API。 here提供了相关API的详细说明。您也可以使用JAVA包装器API。请在下面找到几个例子。

示例1,REST:

获取访问令牌:

curl 
  -d "client_id=admin-cli" 
  -d "username=admin" 
  -d "password=secret" 
  -d "grant_type=password" 
  "http://localhost:8080/auth/realms/master/protocol/openid-connect/token"

获取所有用户:

curl 
  -H "Authorization: bearer eyJhbGciOiJSUzI...." 
  "http://localhost:8080/auth/admin/realms/master/users"

样本输出:

[
     {
        "id":"349f67de-36e6-4552-ac54-e52085109616",
        "username":"admin",
        "enabled":true,
        ...
     },
     {
        "id":"08afb701-fae5-40b4-8895-e387ba1902fb",
        "username":"lbalev",
        "enabled":true,
        ....
     }
  ]

获取基于用户ID的用户:

curl 
  -H "Authorization: bearer eyJhbGciOiJSU...." 
  "http://localhost:8080/auth/admin/realms/master/users/349f67de-36e6-4552-ac54-e52085109616"

例2,JAVA API:

根据使用的ID获取使用情况:

public class TestUserAccess {

  private static final String SERVER_URL = "http://localhost:8080/auth";
  private static final String REALM = "master";
  private static final String USERNAME = "admin";
  private static final String PASSWORD = "secret";
  private static final String CLIENT_ID = "admin-cli";

  public static void main(String[] args) {

    Keycloak keycloak = KeycloakBuilder
        .builder()
        .serverUrl(SERVER_URL)
        .realm(REALM)
        .username(USERNAME)
        .password(PASSWORD)
        .clientId(CLIENT_ID)
        .resteasyClient(new ResteasyClientBuilder().connectionPoolSize(10).build())
        .build();

    UsersResource usersResource = keycloak.realm(REALM).users();
    UserResource userResource = usersResource.get("08afb701-fae5-40b4-8895-e387ba1902fb");
    System.out.println(userResource.toRepresentation().getEmail());
  }
}

上述示例的相关依赖项是(请注意版本可能不是最新的):

dependencies {
    compile group: 'org.keycloak', name: 'keycloak-admin-client', version: '3.3.0.CR2'
    compile group: 'org.jboss.resteasy', name: 'resteasy-jaxrs', version: '3.1.4.Final'
    compile group: 'org.jboss.resteasy', name: 'resteasy-client', version: '3.1.4.Final'
    compile group: 'org.jboss.resteasy', name: 'resteasy-jackson2-provider', version: '3.1.4.Final'
}

以上是关于如何通过ID获取其他用户信息(用户名,名字)? [Keycloak]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SDK for .NET 获取 Facebook 用户的 ID?

如何通过身份池/用户池 ID(子)获取用户池详细信息

如何从推荐URL获取推荐的用户详细信息?

PHP获得当前登录用户ID,详细代码写法

使用php创建应用程序ID后如何从facebook获取用户详细信息

如何在创建个人资料页面中获取注册后创建的用户 ID