任何平台(PaaS)身份验证的安全性的一个重要部分是能够限制和/或定义特定应用程序或用户的“权限”或权限,无论是在用户/应用程序基础上还是在per-authentication基础上。
在现代平台或产品API中发现的通用权限模型基于"Scopes"的思想。在我的研究中,GitHub、Facebook、Instagram、埃西 (等等)都在他们的OAuth实现中使用这种权限建模方式。然而,这种“作用域”模型似乎只关注外部(即。第三方)应用程序访问经过身份验证的用户数据。
在内部,权限模型似乎更关注基于“角色”的模型(管理、版主、用户等)或许多其他自定义实现。
我的问题是:“什么样的权限模型最适合现代PaaS,既希望限制其用户进行某些操作,又能限制第三方应用程序访问用户的数据,以及如何以一种具有性能意识的方式来构建该模型?”?
我最初的研究让我发现了基于范围的权限模型的内部和外部用法。不幸的是,构建这样一个系统并不简单。我看到了创建这样一个体系结构的多种方法:
- Creating multiple tables with join tables for a many-to-many relationship between a list of permissions, a user’s available permissions, a user’s token, and a user token’s active permissions.
- A user may authenticate with a token and specify as many permissions to be available on that token **up to** the permissions originally set for that user
- Using a simple integer column in a data set to store an integer value
- The integer value is accessed in a binary way, using bitwise operators to set, get, toggle (etc) the permissions of a user or their token by representing a permission as a single bit
对每个人来说,他们似乎各有优缺点。AR友好的方式似乎是一种非常灵活的解决方案,但也可能会严重影响性能,因为必须运行多个联接/查询,并且必须在上创建ORM模型实例--每个经过身份验证的调用。比特掩蔽方法似乎非常快速和高效,但开发起来不那么直观,而且更容易出错。此外,比特掩蔽似乎是一种限制解决方案,因为它只允许一个非常“二进制”的权限模型(可以或者不能做到),没有中间/快乐介质,而且它将限制基于硬件限制的硬64位限制。
是否有另一种权限建模或架构方法是我所忽略/不考虑的?还是说我在正确的轨道上,性能方面的考虑并不像我想象的那样(就关系方法而言)?
非常感谢!
tl;dr:
什么样的权限模型最适合现代PaaS,既希望限制其用户的某些操作,也希望限制第三方应用程序访问用户的数据,以及如何以一种具有性能意识的方式来构建该模型?
发布于 2013-07-24 19:02:08
我首先看一下。它们使用位掩码,可以(相对地)很容易地与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/
https://stackoverflow.com/questions/17684451
复制相似问题