当前位置: 首页 > 知识库问答 >
问题:

Keycloak自定义Rest

鱼阳伯
2023-03-14

我们实现了一些新的Rest API作为Keycloak提供程序。提供程序正在工作,但我们找不到检查用户角色的方法。

public class MyResourceProvider implements RealmResourceProvider {

    private final KeycloakSession session;
    private final CustomUserManager userManager;

    public MyResourceProvider(KeycloakSession session) {
        this.session = session;
        this.userManager = CustomUserManager.build(session);
    }

    @POST
    @Path("user/search/attribute")
    @Consumes({MediaType.APPLICATION_JSON})
    @Produces({MediaType.APPLICATION_JSON})
    public List<UserRepresentation> getUsersByAttributes(
            @QueryParam("first") Integer first,
            @QueryParam("max") Integer max,
            SearchUsers searchUsers
    ) {
        // TODO: check user roles
        return userManager.searchForUsers(searchUsers, session.getContext().getRealm(), first, max).stream()
                .map(userModel -> ModelToRepresentation.toRepresentation(session, session.getContext().getRealm(), userModel))
                .collect(toList());
    }
...

我们在网上找不到任何例子

共有1个答案

宓跃
2023-03-14

您可以使用字符串参数“hasAuthority('roles_roleName')”将@preauthorize()注释添加到api中,其中rolename是要检查的角色的名称,如果您在令牌的“roles”字段中有角色的话。

如果要检查用户访问令牌的“范围”字段,请改用“hasAuthority('scope_roleName')”

@POST
@Path("user/search/attribute")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
@PreAuthorize("hasAuthority('ROLES_rolename')")
public List<UserRepresentation> getUsersByAttributes(
        @QueryParam("first") Integer first,
        @QueryParam("max") Integer max,
        SearchUsers searchUsers
) {
    return userManager.searchForUsers(searchUsers, session.getContext().getRealm(), first, max).stream()
            .map(userModel -> ModelToRepresentation.toRepresentation(session, session.getContext().getRealm(), userModel))
            .collect(toList());
}
 类似资料:
  • 在keycloak中实现自定义restendpoint时,我使用了以下示例:

  • 我尝试创建一个自定义spi,在我的keycloak项目中,遵循基本的keycloack结构,我添加了扩展provider的自定义provider接口,正如keycloak文档所说,定制提供程序工厂并为它们实现定制spi,它们在源代码中是这样做的,之后,我为我的提供程序和提供程序工厂创建一个自定义实现,如文档所述,我在Meta-INF/Services中创建文件,我正在使用ear aproach来部

  • 在过去的几周里,我一直在努力掌握KeyClope,这样我就可以实现一种使用遗留提供商(基于Oracle,带有会话表和各种奇怪的东西)对用户进行身份验证的方法。我们计划在不久的将来解决这个问题,但目前我们必须解决这个问题,所以我们的想法是在前线使用KeyClope——利用它提供的主要好处,比如SSO——在需要身份验证的应用程序中省略传统的身份验证提供程序。 我读了一些关于构建自定义OIDC身份提供程

  • 我正在尝试创建一个自定义的KeyClope提供程序,它将为登录逻辑添加一些内容。我已经读过如何为KeyClope创建提供者(或插件),我正在与之合作的项目中已经有一个提供者(或插件),但我对它们知之甚少。 我需要为用户身份验证/授权添加自定义逻辑:我希望能够检查内部数据库中的一些字段来验证人员帐户。但是我没有找到任何关于类似情况的指南或好文章。有人能给我提供一些关于从什么开始的链接吗?为了实现这样

  • 我已经为我的组织的需求添加了一些自定义属性到注册字段。根据文档自定义了主题并添加了验证。很好用。我可以添加这些属性到帐户管理页面也通过修改帐户模板。

  • 我使用的是jboss KeyCloak1.5最终版本。我开发了与keycloak属性和我的用户企业数据库接口的自定义用户联邦提供程序。 我的需要是发送到用户登录界面自定义的错误消息,基于特定的特定错误与我的遗留用户数据库。