基于角色的授权与基于声明的授权

信息安全 验证 授权 身份 联邦 rbac
2021-08-09 19:20:38

“基于角色的授权”和“基于声明的授权”有什么区别?在什么情况下实施这些授权模型是合适的?

2个回答

声明是一种提供用户信息的方法,而角色是对用户所属角色的描述。

声明通常更有用,因为它们可以包含任意数据——包括角色成员信息。例如,对给定应用程序有用的任何东西。

基于声明的身份更有用,但使用起来往往更棘手,因为首先要获取声明涉及很多设置。RBAC 身份不太有用,因为它们只是角色的集合,但它们通常更容易设置。

.NET 堆栈和整个 Windows 都在声明中。Windows 身份验证票证是声明,Active Directory 现在能够将声明用于某些功能。.NET 堆栈现在默认使用声明标识作为基本标识对象。

正如@SteveS 所说,RBAC 是一种授权模型,而声明是一种提供用户信息的方式。它概括了角色的概念。在过去,身份服务器只会为应用程序提供用户名和角色/组列表。声明对此进行了概括,以便任何用户属性都可以传递给消费应用程序。

授权本身仍然使用声明和它自己的逻辑来处理授权。Microsot SharePoint 和 Windows Server 2012 是使用声明来提供更细粒度授权的应用程序的良好示例。SharePoint 假设如果用户至少有一个也分配给网站/文档的声明,则允许访问。Windows Server 2012 有一种称为 SDDL 的语言,可用于组合用户声明和文件分类信息。

不过,一般来说,您希望将 RBAC(基于角色的访问控制)与 ABAC(基于属性的访问控制)进行比较。两者都是 NIST 定义的授权模型。两者都可以使用声明,但不一定。此外,声明非常以用户为中心,而 ABAC 允许您根据用户属性(声明)以及资源(对象)属性甚至上下文(一天中的时间......)来定义授权。

ABAC 在 OASIS XACML 标准(可扩展访问控制标记语言)中实现,该标准为您提供基于属性和策略的访问控制。

您可以查看以下一些很好的参考资料: