java - 如何获取Keycloak用户的角色和属性

标签 java keycloak keycloak-rest-api

如何使用Keycloak的Java Client获取用户的角色和属性?下面是我编写的用于获取用户的访问 token 的代码,但是,我无法找到获取分配给该用户的角色的方法。

Configuration configuration = new Configuration();
configuration.setRealm("foo");
configuration.setResource("foo");
configuration.setBearerOnly(Boolean.TRUE);
configuration.setAuthServerUrl("http://localhost:8080");
configuration.setCredentials(Map.of("secret", "FV3P4ajYHedAUDtOa55EX5nzK8zc6jUA"));


AuthzClient authzClient = AuthzClient.create(configuration);
AuthorizationRequest request = new AuthorizationRequest();


AuthorizationResponse authorize = authzClient.authorization("john.doe", "john.doe").authorize(request);
String token = authorize.getToken();
log.info("Auth bearer token is {}", token);

最佳答案

您将 token 作为字符串,即:

String token = authorize.getToken();

现在您只需解析它即可获取领域和客户端角色,这些角色编码在 token 中。为此,您可以使用 class TokenVerifier来自org.keycloak.TokenVerifier

例如:

try {
    AccessToken token = TokenVerifier.create(tokenString, AccessToken.class).getToken();
    System.out.printf("Realm 'foo' = Roles %s%n", token.getRealmAccess().getRoles());

    token.getResourceAccess().forEach((k, v) -> System.out.printf("Client '%s' = Roles '%s'%n", k, v.getRoles()));
} catch (VerificationException e) {
    ...
}

关于java - 如何获取Keycloak用户的角色和属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73671590/

相关文章:

keycloak - 哪些角色使 Keycloak 领域中的用户能够使用 Admin-REST-API?

oauth-2.0 - Keycloak 无效的 token 发行者

java - Redis是否只允许字符串表示而不允许数值

java - android-如果我将两个小部件放在一起然后触摸它们会发生什么?

keycloak 参数无效 : redirect_uri

authentication - 在 keycloak token 中为内部数据库中的用户 ID 使用 "sub"声明是否安全

node.js - 使用 Keycloak Rest API 将用户添加到客户端角色

java - Android 中已弃用的 People 类的替代方案

java - 从另一个类导入命令参数

java - 使用 quarkus-oidc 从 SecurityIdentity 访问用户信息