Ric*_*an7 15 architecture permissions database-design authorization
任何平台(PaaS)身份验证的安全性的一个重要部分是能够基于用户/应用程序或基于身份验证限制和/或定义特定应用程序或用户的"权限"或权限.
现代平台或产品API中的常见权限模型基于"范围"的概念.在我的研究中,GitHub,Facebook,Instagram,Etsy(以及更多)都在他们的OAuth实现中使用这种风格的权限建模.但是,这种"范围"模型似乎只关注外部(即第三方)应用程序如何访问经过身份验证的用户数据.
在内部,权限模型似乎更侧重于基于"角色"的模型(管理员,主持人,用户等)或许多其他自定义实现.
我的问题是:"哪种权限模型最适合现代PaaS,既希望限制用户使用某些操作,又限制第三方应用程序访问用户数据,以及如何以性能意识的方式构建?"
我最初的研究使我对内部和外部使用基于范围的权限模型.不幸的是,构建这样一个系统并非易事.我见过多种创建这种架构的方法:
AR友好的关系DB方式:
使用连接表创建多个表,以获得权限列表,用户可用权限,用户令牌和用户令牌的活动权限之间的多对多关系.
用户可以使用令牌进行身份验证,并指定该令牌上可用的权限,直到最初为该用户设置的权限
聪明的Bit-masking方式:
使用数据集中的简单整数列来存储整数值
以二进制方式访问整数值,使用按位运算符通过将权限表示为单个位来设置,获取,切换(等)用户或其令牌的权限
他们似乎对每个人都有利有弊.AR友好的方式似乎是一个非常灵活的解决方案,但似乎它可能是一个严重的性能损失,因为必须运行多个连接/查询,并且必须在每个经过身份验证的调用上创建ORM模型实例.比特掩码方法看起来非常快速有效,但开发起来不太直观,而且更容易出错.此外,位屏蔽似乎是一个限制性的解决方案,因为它只能轻松地允许一个非常"二进制"的权限模型(可以或不可以),没有中间/快乐媒体,并且它会限制权限基于硬件限制的硬64位限制.
是否有其他方法的权限建模或架构我缺少/没有想到?或者我是否在正确的轨道上并且性能考虑并不是一个大问题(就关系方法而言),因为我正在制定它?
非常感谢!
哪种权限模型最适合现代PaaS,既要限制用户使用某些操作,又要限制第三方应用程序访问用户数据,以及如何以性能意识的方式构建?
我首先看一下 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/
归档时间: |
|
查看次数: |
1674 次 |
最近记录: |