构建平台授权权限模型

时间:2013-07-16 18:38:26

标签: database-design architecture permissions authorization

任何平台(PaaS)身份验证的安全性的一个重要部分是能够基于用户/应用程序或每身份验证<来限制和/或定义特定应用程序或用户的“权限”或权限/ strong>基础。

现代平台或产品API中的常见权限模型基于“范围”的概念。在我的研究中,GitHubFacebookInstagramEtsy(以及更多)都在其OAuth实施中使用这种权限建模方式。但是,这种“范围”模型似乎只关注外部(即第三方)应用程序如何访问经过身份验证的用户数据。

在内部,权限模型似乎更侧重于基于“角色”的模型(管理员,主持人,用户等)或许多其他自定义实现。

我的问题是:“哪种权限模型最适合现代PaaS,既要限制用户使用某些操作,又要限制第三方应用程序访问用户的数据,以及如何构建一种注重表现的方式?“

我的初步研究使我对内部和外部使用基于范围的权限模型。不幸的是,构建这样一个系统并非易事。我已经看到了创建这种架构的多种方法:

  1. AR友好关系数据库方式:

    • 使用连接表创建多个表,以获取权限列表,用户可用权限,用户令牌和用户令牌的活动权限之间的多对多关系。

    • 用户可以使用令牌进行身份验证,并指定该令牌上可用的权限最多最初为该用户设置的权限

  2. 聪明的Bit-masking方式:

    • 使用数据集中的简单整数列来存储整数值

    • 以二进制方式访问整数值,使用按位运算符通过将权限表示为单个位来设置,获取,切换(等)用户或其令牌的权限

  3. 他们似乎对每个人都有利有弊。 AR友好的方式似乎是一个非常灵活的解决方案,但似乎它可能是一个严重的性能损失,因为必须运行多个连接/查询,并且必须在每个经过身份验证的情况下创建ORM模型实例调用即可。比特掩码方法看起来非常快速有效,但开发起来不太直观,而且更容易出错。此外,位屏蔽似乎是一个限制性的解决方案,因为它只能轻松地允许一个非常“二进制”的权限模型(可以或不可以),没有中间地板/快乐媒体,并且它会限制权限基于硬件限制的硬64位限制。

    是否有其他方法的权限建模或架构我缺少/没有想到?或者我是否在正确的轨道上并且性能考虑并不是那么大的关注(就关系方法而言),因为我正在制定它?

    非常感谢你!

    TL; DR:

    哪种权限模型最适合现代PaaS,既要限制用户使用某些操作,又要限制第三方应用程序访问用户的数据,以及如何以性能意识的方式构建?

1 个答案:

答案 0 :(得分:1)

我首先来看一下Spring Security ACL。它们使用位掩码,并且可以(相对)轻松地与像ehcache这样的缓存集成。如果您使用JPA进行数据访问,也可以使用JPA的缓存。

http://static.springsource.org/spring-security/site/docs/current/reference/springsecurity.html

架构:

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-schema.html

的OAuth:

http://static.springsource.org/spring-security/oauth/