任何平台 (PaaS) 身份验证安全性的一个重要部分是能够基于用户/应用程序或每个身份验证来限制和/或定义特定应用程序或用户的“权利”或权限。
现代平台或产品 API 中的通用许可模型基于“范围”的概念。在我的研究中,GitHub、Facebook、Instagram、Etsy(等等)都在他们的 OAuth 实现中使用了这种权限建模风格。然而,这种“范围”模型似乎只关心外部(即第三方)应用程序如何访问经过身份验证的用户的数据。
在内部,权限模型似乎更侧重于基于“角色”的模型(管理员、版主、用户等)或许多其他自定义实现。
我的问题是:“哪种权限模型最适合现代 PaaS,既希望限制其用户进行某些操作,又限制 3rd 方应用程序访问用户数据,以及如何以性能意识的方式进行架构?”
我最初的研究引导我在内部和外部使用基于范围的权限模型。不幸的是,构建这样一个系统并非易事。我见过多种创建这种架构的方法:
对 AR 友好的关系数据库方式:
为权限列表、用户的可用权限、用户的令牌和用户令牌的活动权限之间的多对多关系创建具有连接表的多个表。
用户可以使用令牌进行身份验证,并指定在该令牌上可用的权限与最初为该用户设置的权限一样多
聪明的位掩码方式:
在数据集中使用简单的整数列来存储整数值
整数值以二进制方式访问,使用位运算符通过将权限表示为单个位来设置、获取、切换(等)用户或其令牌的权限
他们似乎对每个人都有一些优点和缺点。对 AR 友好的方式似乎是一个非常灵活的解决方案,但似乎也可能对性能造成严重影响,因为必须运行多个连接/查询,并且必须在每个经过身份验证的调用上创建 ORM 模型实例。位掩码方法似乎非常快速和高效,但开发起来不太直观,并且更容易出错。此外,位掩码似乎是一个限制性解决方案,因为它只会很容易地允许非常“二进制”的权限模型(可以或不能做)而没有中间立场/快乐媒介,并且它会将权限限制为基于硬件限制的硬 64 位限制。
是否有另一种我错过/没有想到的权限建模或架构方法?或者我是否走在正确的轨道上并且性能考虑并不像我想象的那么大(就关系方法而言)?
太感谢了!
tl;博士:
哪种权限模型最适合现代 PaaS,既希望限制其用户执行某些操作,又限制 3rd 方应用程序访问用户数据,以及如何以性能意识的方式构建它?