Keycloak Java适配器 - 检索列表角色

时间:2018-02-07 18:16:34

标签: java eclipse wildfly keycloak

我需要检索与用户关联的角色,但我正在使用wildfly,我已经在wildfly和我的Java项目中安装了所有jar keycloak,但是我可以通过Java适配器检索此列表吗?

其他选项是通过get,post,put等调用其他api,就像任何api一样。但我的第一个选择是Adapters。

我通过适配器进行身份验证,但我找不到任何方法来检索角色,客户端,领域等。

我错了,或者适配器仅用于身份验证?

任何人都有一个很好的例子吗?

3 个答案:

答案 0 :(得分:4)

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

然后获得角色

答案 1 :(得分:1)

谢谢,其他方式:(按名称检索一个角色)

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

&#34;授权&#34;是字符串令牌承载

&#34;的getInstance&#34;有其他方法可以发送例如pass和user。

答案 2 :(得分:0)

如果还有其他人还在苦苦挣扎,这里有一个完整的答案:

  1. 创建安全上下文生产者:
@RequestScoped
public class SecurityContextProducer {

    @Inject
    private HttpServletRequest request;

    @Produces
    public KeycloakSecurityContext getSecurityContext() {
        return ((KeycloakPrincipal) request.getUserPrincipal())
                .getKeycloakSecurityContext();
    }
}
  1. 像这样使用它:
    @Inject
    private KeycloakSecurityContext keycloakSecurityContext;

    public List<String> getRolesKeycloak() {
        Set<String> roleNames = keycloakSecurityContext.getToken().getRealmAccess().getRoles();
        List<String> targetList = new ArrayList<>(roleNames);
        return targetList;
    }