从 Keycloak 访问 admin/groups OIDC API 时出现错误 403

Posted

技术标签:

【中文标题】从 Keycloak 访问 admin/groups OIDC API 时出现错误 403【英文标题】:Error 403 accessing admin/groups OIDC API from Keycloak 【发布时间】:2019-10-12 22:17:29 【问题描述】:

仅使用 keycloak-authz-client (6.0.1)(无 Spring Security),我需要从我的服务提供商处读取用户信息和用户组。

在获得正确的访问令牌后,感谢 AuthzClient,我能够访问用户信息 API:

    UriBuilder target = UriBuilder.fromUri(kcURL);
    target.path("realms/realm/protocol/openid-connect/userinfo")
          .resolveTemplate("realm", this.realm);

    UserInfoOIDC info = new UserInfoOIDC();
    try 
        UserInfo response = this.buildBearerInvocation(target, accessToken).get(UserInfo.class);
        info.setName(response.getName());
        info.setUsername(response.getPreferredUsername());
        info.setCompleted(true);
        log.info("User info successfully retrieved from ", this.realm);
     catch (WebApplicationException e) 
        log.error("User info failure on : ", this.realm, e.getMessage());
    
...
    private Invocation.Builder buildBearerInvocation(UriBuilder target, String accessToken) 
        WebTarget webTarget = restClient.target(target);
        Invocation.Builder builder = webTarget.request(APPLICATION_JSON)
                .header(AUTHORIZATION, "Bearer " + accessToken);
        return builder;
    

但我无法访问“管理 API”:

    UriBuilder target = UriBuilder.fromUri(kcURL);
    target.path("admin/realms/" + this.realm);
    target.path("users/" + userId);
    target.path("groups");
    try 
        return this.buildBearerInvocation(target, accessToken)
                .get(GroupRepresentation.class);
     catch (WebApplicationException e) 
        log.error("User groups failure on realms : ", this.realm, e.getMessage());
    

[main] INFO com.LoggingFilter - 处理http://localhost:8080/auth/admin/realms/TestRealm/users/0f443554-01d0-4b40-a652-0c8c174632d4/groups [main] 错误 com.KeycloakProvider - 领域 TestRealm 上的用户组失败:HTTP 403 Forbidden

我想知道这是否仅仅是由于用户访问权限不足,或者是这里的 CORS 问题(我已在我的 etc/hosts 文件中添加了“127.0.0.1 localhost-auth”,完全不确定这是否会不过,在这里有任何帮助)。 如何向用户打开“admin API”、更多 CORS 配置或用户的任何特殊角色?

已编辑 - Keycloak Admin Client 在这里没有帮助(HTTP 403 也被禁止):

    @Test
    public void checkKeycloakAdminClient() 
        Keycloak client = KeycloakBuilder.builder()
                .serverUrl(url)
                .realm(realm)
                .username(adminUsername)
                .password(adminPassword)
                .clientId(clientId)
                .clientSecret(clientSecret)
                .build();
        RealmResource realmResource = client.realm(realm);

        UsersResource usersResource = realmResource.users();
        List<UserRepresentation> users = usersResource.search(username);
    

【问题讨论】:

【参考方案1】:

将“领域管理”领域客户端中的所有“查看-...”和“查询-...”可用客户端角色分配给管理员用户(请参阅用户/角色映射)。

【讨论】:

以上是关于从 Keycloak 访问 admin/groups OIDC API 时出现错误 403的主要内容,如果未能解决你的问题,请参考以下文章

如何使用邮递员从 keycloak 获取访问令牌(授权码流)

从 keycloak 刷新访问令牌时出现 CORS 错误

从 Keycloak 访问 admin/groups OIDC API 时出现错误 403

从 postman 访问 keycloak API

除了 keycloak 令牌之外,我还需要其他任何东西来访问使用 keycloak 保护的服务吗?

如何从 Keycloak JWT 访问令牌中删除属性?