Keycloak Java 适配器 - 检索角色列表
Keycloak Java adapter - Retrieving roles list
我需要检索与用户关联的角色,但我正在使用 wildfly,我已经在 wildfly 和我的 Java 项目中安装了所有 jar keycloak,但是我可以通过 [=21= 检索此列表] 适配器?
其他选项是通过 get、post、put 等调用其余 api,就像任何 api 一样。但我的第一个选项是 Adapters。
我通过适配器进行身份验证,但我找不到任何方法来检索角色、客户端、领域等。
我错了还是适配器只是为了认证?
谁有好的例子?
在 keycloak.json 中设置选项 use-resource-role-mappings : true
并且您应该能够在 servlet 中获得角色,如下所示
KeycloakPrincipal principal = (KeycloakPrincipal)request.getUserPrincipal();
principal.getKeycloakSecurityContext().getToken().getResourceAccess("testclient").getRoles();
您还可以从这样的上下文中获取KeycloakPrincipal
Subject subject = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");
Set<KeycloakPrincipal> principals = subject.getPrincipals(KeycloakPrincipal.class);
然后获取角色
谢谢,这里是另一种方式:(按名称检索一个角色)
Keycloak keycloak = Keycloak.getInstance("http://localhost/auth", "realm-name", "client-name", authorization);
RoleRepresentation role = keycloak.realm("realm-name").clients().get(idOfClient).roles().get(roleName).toRepresentation();
要列出所有用户:
UsersResource users = keycloak.realm("realm-name").users();
而"authorization"是字符串令牌承载者
"getInstance" 还有其他方法可以发送,例如 pass 和 user。
如果其他人仍在苦苦挣扎,这里有一个完整的答案:
- 创建安全上下文生产者:
@RequestScoped
public class SecurityContextProducer {
@Inject
private HttpServletRequest request;
@Produces
public KeycloakSecurityContext getSecurityContext() {
return ((KeycloakPrincipal) request.getUserPrincipal())
.getKeycloakSecurityContext();
}
}
- 这样使用:
@Inject
private KeycloakSecurityContext keycloakSecurityContext;
public List<String> getRolesKeycloak() {
Set<String> roleNames = keycloakSecurityContext.getToken().getRealmAccess().getRoles();
List<String> targetList = new ArrayList<>(roleNames);
return targetList;
}
这不是主题,但我需要找到与特定用户关联的角色,这个问题首先出现在我的关键字网络搜索中。以下是 keycloak 客户端 13.0.1
对我有用的方法
RealmResource realmResource = keycloak.realm(REALM);
UsersResource usersResource = realmResource.users();
UserResource userResource = usersResource.get(USER_ID);
RoleMappingResource roleMappingResource = userResource.roles();
// either realmLevel or clientLevel
RoleScopeResource roleScopeResource = roleMappingResource.realmLevel();
List<RoleRepresentation> rolesRepresentation = roleScopeResource.listAll();
在别处没找到,希望有用
我需要检索与用户关联的角色,但我正在使用 wildfly,我已经在 wildfly 和我的 Java 项目中安装了所有 jar keycloak,但是我可以通过 [=21= 检索此列表] 适配器?
其他选项是通过 get、post、put 等调用其余 api,就像任何 api 一样。但我的第一个选项是 Adapters。
我通过适配器进行身份验证,但我找不到任何方法来检索角色、客户端、领域等。
我错了还是适配器只是为了认证?
谁有好的例子?
在 keycloak.json 中设置选项 use-resource-role-mappings : true
并且您应该能够在 servlet 中获得角色,如下所示
KeycloakPrincipal principal = (KeycloakPrincipal)request.getUserPrincipal();
principal.getKeycloakSecurityContext().getToken().getResourceAccess("testclient").getRoles();
您还可以从这样的上下文中获取KeycloakPrincipal
Subject subject = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");
Set<KeycloakPrincipal> principals = subject.getPrincipals(KeycloakPrincipal.class);
然后获取角色
谢谢,这里是另一种方式:(按名称检索一个角色)
Keycloak keycloak = Keycloak.getInstance("http://localhost/auth", "realm-name", "client-name", authorization);
RoleRepresentation role = keycloak.realm("realm-name").clients().get(idOfClient).roles().get(roleName).toRepresentation();
要列出所有用户:
UsersResource users = keycloak.realm("realm-name").users();
而"authorization"是字符串令牌承载者
"getInstance" 还有其他方法可以发送,例如 pass 和 user。
如果其他人仍在苦苦挣扎,这里有一个完整的答案:
- 创建安全上下文生产者:
@RequestScoped
public class SecurityContextProducer {
@Inject
private HttpServletRequest request;
@Produces
public KeycloakSecurityContext getSecurityContext() {
return ((KeycloakPrincipal) request.getUserPrincipal())
.getKeycloakSecurityContext();
}
}
- 这样使用:
@Inject
private KeycloakSecurityContext keycloakSecurityContext;
public List<String> getRolesKeycloak() {
Set<String> roleNames = keycloakSecurityContext.getToken().getRealmAccess().getRoles();
List<String> targetList = new ArrayList<>(roleNames);
return targetList;
}
这不是主题,但我需要找到与特定用户关联的角色,这个问题首先出现在我的关键字网络搜索中。以下是 keycloak 客户端 13.0.1
对我有用的方法RealmResource realmResource = keycloak.realm(REALM);
UsersResource usersResource = realmResource.users();
UserResource userResource = usersResource.get(USER_ID);
RoleMappingResource roleMappingResource = userResource.roles();
// either realmLevel or clientLevel
RoleScopeResource roleScopeResource = roleMappingResource.realmLevel();
List<RoleRepresentation> rolesRepresentation = roleScopeResource.listAll();
在别处没找到,希望有用