如何使用Keyloak的Java客户端获取用户的角色和属性?以下是我为获取用户的访问令牌而编写的代码,但是,我无法找到获取分配给该用户的角色的方法.

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);

推荐答案

您的令牌为String,即:

String token = authorize.getToken();

现在,您只需对其进行解析,即可获得域和客户端角色,这些角色都编码在令牌中.要做到这一点,你可以使用org.keycloak.TokenVerifier中的class 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相关问答推荐

在Spring Boot中测试时出现SQL语法错误

try Dockerize Maven应用程序,但发布版本21不支持"

为什么接口中的主函数而不是类中的主函数在Java 17中编译和运行没有问题?

错误:在Liferay7.4中找不到符号导入com.liferay.portal.kernel.uuid.PortalUUID;";

Hibernate 6支持Joda DateTime吗?

Spark上下文在向Spark提交数据集时具有内容,但Spark在实际构建它时发现它为空

如何正确创建序列图?

第二次按下按钮后,我需要将按钮恢复到其原始状态,以便它可以再次工作

使用Spring和ActiveMQ的侦听器方法引发属性名称不能重复为空警告

Docker不支持弹性APM服务器

Spring Boot&;Docker:无法执行目标org.springframework.boot:spring-boot-maven-plugin:3.2.0:build-image

如何读取3个CSV文件并在控制台中按顺序显示?(Java)

Java创建带有扩展通配符的抽象处理器

如何制作回文程序?

TinyDB问题,无法解析符号';上下文&

如何在Struts2中使用操作类中的结果注释重定向到不同的命名空间

为什么Spring要更改Java版本配置以及如何正确设置?

设置背景时缺少Android编辑文本下划线

无泄漏函数的Java DRY

";重复键的值提示唯一约束«;livre_genre_pkey»";例外