搜索

9.3. 获取授权上下文

download PDF

启用策略强制后,服务器获取的权限可通过 org.keycloak.AuthorizationContext 提供。此类提供了多种方法,您可以用来获取权限,并确定是否授予特定资源或范围的权限。

获取 Servlet 容器中的授权上下文

    HttpServletRequest request = // obtain javax.servlet.http.HttpServletRequest
    AuthorizationContext authzContext = (AuthorizationContext) request.getAttribute(AuthorizationContext.class.getName());
注意

授权上下文可帮助您对服务器做出和返回的决策提供更多控制。例如,您可以使用它来构建隐藏或显示项目的动态菜单,具体取决于与资源或范围关联的权限。

if (authzContext.hasResourcePermission("Project Resource")) {
    // user can access the Project Resource
}

if (authzContext.hasResourcePermission("Admin Resource")) {
    // user can access administration resources
}

if (authzContext.hasScopePermission("urn:project.com:project:create")) {
    // user can create new projects
}

AuthorizationContext 代表红帽构建的 Keycloak 授权服务的主要功能之一。在上面的示例中,您可以看到受保护的资源不直接与管理它们的策略关联。

使用基于角色的访问控制(RBAC)考虑一些类似的代码:

if (User.hasRole('user')) {
    // user can access the Project Resource
}

if (User.hasRole('admin')) {
    // user can access administration resources
}

if (User.hasRole('project-manager')) {
    // user can create new projects
}

虽然这两个示例都满足相同的要求,但它们以不同的方式进行配置。在 RBAC 中,角色仅 隐式 定义其资源的访问权限。使用红帽构建的 Keycloak,您可以创建更易管理的代码,该代码直接专注于资源,无论您使用 RBAC、基于属性的访问控制(ABAC)还是任何其他 BAC 变体。您有给定资源或范围的权限,或者您没有该权限。

现在,假设您的安全要求已更改,并且项目管理器除了项目管理器外,SpmO 也可以创建新项目。

安全要求改变,但红帽构建的 Keycloak 无需更改应用程序代码来满足新的要求。当应用程序基于资源和范围标识符后,您只需要更改与授权服务器中特定资源关联的权限或策略的配置。在本例中,与项目资源关联的权限和策略,或范围 urn:project.com:project:create 将被更改。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.