基于资源的访问控制与基于角色的访问控制

2024-05-09

我正在学习 Apache Shiro,发现了这篇文章:

新的 RBAC:基于资源的访问控制 http://www.stormpath.com/blog/new-rbac-resource-based-access-control

作者说:

......您可以将行为(权限)直接分配给角色,如果您 想。从这个意义上说,您仍然拥有基于角色的访问控制 安全策略 - 只是你会有一个明确的 RBAC 策略 而不是传统的隐性策略。

但这引出了一个问题——为什么要止步于角色?您可以分配 直接针对用户、群组或任何其他您的行为 安全策略可能允许。

看来作者更喜欢直接存储User和Permission的关系,而不是通过Role来存储。

虽然这看起来简单明了,但我有一些问题:

  1. 他们两者之间有什么本质区别吗?

  2. 数据库架构。

在基于角色的访问控制中,通常我们使用三个表来描述关系:

user
role
user_role

否,如果我使用基于资源的访问控制,构建表的正常做法是什么?


这是我第一次听说基于资源的访问控制。

走这条路我会非常小心。在授权领域本质上有两个标准:

  • 基于角色的访问控制 (RBAC),由NIST http://csrc.nist.gov/groups/SNS/rbac/并在主要供应商(CA、Oracle、IBM...)的支持下在数千个应用程序和框架中实施
  • 基于属性的访问控制 (ABAC) 的标准化NIST http://csrc.nist.gov/publications/drafts/800-162/sp800_162_draft.pdf (also here http://csrc.nist.gov/projects/abac/)并且同样得到 IBM、Oracle 和我工作的 Axiomatics 等供应商的良好实施。

基于资源的访问控制似乎是 Stormpath 发明的模型,并且仅由他们支持。这可能很好,但只适用于他们的环境。

基于角色和基于属性的访问控制是 NIST 和 OASIS 等其他标准化机构(其中 SAML 和 XACML 于 10 年前定义的,至今仍受支持)支持的广泛接受的范式。

您面临的问题是:为什么基于角色的访问控制对您来说还不够?您有角色爆炸的问题吗?是不是表现力不够?您是否需要实现用户、资源和上下文之间的关系?

ABAC 和 XACML 可以让您做到这一点。我不久前在 YouTube 上发布了一个简单的视频,该视频涉及基于属性的访问控制。有一个look http://www.youtube.com/watch?v=xUEbBKnxWSo.

最重要的是,RBAC 和 ABAC 是跨多个应用程序和层工作的标准。基于资源的访问控制仅特定于 Apache Shiro。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于资源的访问控制与基于角色的访问控制 的相关文章

  • 如何在 Jenkins 管道中使用 Google 服务帐户进行身份验证

    我想用gcloud在 Jenkins 管道中 因此我必须首先使用 Google 服务帐户进行身份验证 我正在使用https wiki jenkins io display JENKINS Google OAuth Plugin https
  • AngularJS + Laravel 5 身份验证

    在使用 AngularJS 构建 SPA 时 我想在 AngularJS 网站中实现用户身份验证 但是 我不知道从哪里开始以及最佳实践是什么 基本上我有一个确定可以担任一个或多个角色 我寻找了一些例子 这样我就可以对如何正确处理这个问题有一
  • 如何验证最终用户经过身份验证的令牌(使用 Firebase 身份验证)来调用 google cloud run 端点?

    请帮助使用 firebase 身份验证在云运行中进行最终用户身份验证 简短的介绍 我从 firebase 函数提交 Authorization Bearer idToken 标头 并使用电子邮件 密码 firebase 用户进行身份验证的
  • 使用 Wordpress 验证 Flask API

    我有两个网站 一个托管大部分内容的 WordPress 博客 我还用 Flask 编写了一个 API 我想在 Wordpress 受密码保护的页面 中使用 API 但我需要在 Flask 响应之前验证请求是否经过身份验证 当我收到对 Fla
  • 使用单个查询和每用户密码盐进行用户登录

    我决定使用存储在数据库中的每用户盐来实现用户登录 盐作为密码的前缀 该密码使用 SHA 进行哈希处理并存储在数据库中 过去 当我不使用盐时 我会使用典型的方法 使用用户输入的用户名和密码来计算查询返回的行数 然而 对于每个用户的盐 您需要先
  • WPF 和 WCF 应用程序的用户身份验证/授权的“最佳实践”是什么?

    假设我有一个 NET 富客户端 WPF 应用程序 它将同时部署在 3 个不同的场景中 客户端和服务器代码在单个进程中运行 客户端代码在 Intranet 计算机上运行 并通过 WCF 与运行应用程序 域 基础设施代码的服务器计算机进行通信
  • Sencha Touch 和远程服务器上的身份验证

    我希望收到您关于使用 PhoneGap 和 Sencha Touch 的应用程序以及带有 Active Directory 的 NET 服务器的身份验证机制的反馈 因此 我们需要在移动设备上存储用户凭据 以便用户每次希望使用该应用程序时都不
  • Firebase Auth - 最近登录多长时间

    我有一个个人资料选项卡 用户可以在其中按编辑并编辑他们的个人资料 我只想在必要时才需要他们的密码 所以想知道用户登录的时间是多少毫秒 这使得它不是最近登录 其中firebase会抛出错误 auth requires recent login
  • django 中的身份验证方法返回 None

    你好 我在 django 中做了一个简单的注册和登录页面 当想要登录时 登录视图中的身份验证方法不返回任何内容 我的身份验证应用程序 模型 py from django db import models from django contri
  • 从 Kubernetes Python 客户端登录到 GitLab 存储库

    我有一个 Django 应用程序 它使用python 的官方 Kubernetes 客户端 https github com kubernetes client python并且工作正常 但它只部署 正确 公共注册表 有没有办法执行登录后让
  • Apache 反向代理的基本身份验证问题

    我想为在 Ubuntu 服务器 12 04 1 上运行的 Apache 反向代理站点添加基本身份验证 网络应用程序是Jenkins http jenkins ci org运行在 Java EE 容器上 我在中添加了以下配置httpd con
  • 在 Rails 3 中选择性地关闭 Devise 的 Flash 通知

    Devise 身份验证框架在各处都使用 Flash 通知 这使得与应用程序集成变得很容易 但有时会导致用户体验不佳 我想知道有什么简单的方法可以有选择地关闭 Rails 3 应用程序中的一些 Devise flash 通知 特别是 我想摆脱
  • AADSTS50011:请求中指定的回复 URL 与为应用程序配置的回复 URL 不匹配:'*****-*****-*****-*****-**** ******'

    我正在尝试使用 Django Microsoft 身份验证后端 允许 o365 登录我的 Django 项目 https django microsoft auth readthedocs io en latest https django
  • WCF WebHttp 混合身份验证(基本和匿名)

    所有这些都与 WebHttp 绑定有关 托管在自定义服务主机中 IIS 目前不是一个选项 我已经实现了自定义 UserNamePasswordValidator 和自定义 IAuthorizationPolicy 当我将端点的绑定配置为使用
  • 无法启动活动?

    在添加异步任务之前 我对代码进行了一些更改 我的应用程序可以正常工作 从远程服务器验证用户名和密码 但在登录成功消息消失时无法启动其他活动 有人建议我添加异步任务 现在我已经添加了该任务 但是当我输入正确的用户名和密码时 它会停止工作 当我
  • 在 iOS 上使用 Web 服务的最佳方式?

    我想构建一个 iOS 应用程序 让您登录到网络服务 之后 应用程序将 当用户选择时 通过 https 发送登录名 密码以及请求的变量 例如 在请求 新闻更新 后 它将收到 XML 格式的请求信息 类似于
  • TortoiseSVN 不要求身份验证?

    我已经在conf文件中设置了一个新的SVN存储库 运行SVNServe anon access none SVNServe 忠实地正确地做到了这一点 但是当我尝试使用 TortoiseSVN 浏览存储库时 它只是说不允许访问 它不应该要求我
  • 如何绕过Keycloak登录表单直接跳转到IDP登录?

    我正在运行saml 经纪人身份验证 https github com keycloak keycloak tree 3 2 1 Final examples broker saml broker authentication例子 我在 UI
  • 通过移动应用程序使用 Moodle 进行身份验证

    我的移动应用程序需要登录 Moodle 以从 Web 服务获取 Json 数据并使用 Angular 显示它 为此 我需要传入用户名和密码并取回 Moodle Web 服务令牌 因此我的应用程序不需要再次登录 至少在令牌过期之前 这是 提出
  • 如何在 JSF 中实现登录过滤器?

    即使用户知道某些页面的网址 我也想阻止某些页面的访问 例如 localhost 8080 user home xhtml 需要先登录 如果没有登录则重定向到 index xhtml 在 JSF 中如何做到这一点 我在谷歌上看到需要一个过滤器

随机推荐