身份验证/授权架构

时间:2008-12-19 16:28:47

标签: authentication model authorization schema data-modeling

是否有针对身份验证/授权架构的最佳实践数据模型?

3 个答案:

答案 0 :(得分:4)

由角色到权限的映射组成的数据模型非常灵活,适合大多数用途。

然后您将角色分配给用户(概念基本上与组的角色相同)...用户可能有多个角色,他们的角色定义了他们拥有的权限。

在代码中,您检查(通过他们的角色)用户拥有执行功能所需的权限。

身份验证是独立的,它只是验证用户是谁,而不是他们能做什么。通常你应该保持这种分离(虽然有一些方案被设计成只关心用户可以做什么,而不是他们是谁)。

在您的设计中,您可以将访问控制系统可视化为矩阵(特权角色)。

我还会扩展'不存储密码'的答案 - 根本不设计自己的身份验证方案。你可能会弄错。重用一个经过验证的。

答案 1 :(得分:2)

最重要的是

不存储密码

存储密码摘要。请参阅RFC 2069和此Wikipedia article。当有人尝试进行身份验证时,您需要将其输入的摘要与您必须查看其摘要匹配的摘要进行比较。

答案 2 :(得分:1)

我将在S.Lott回答“不存储密码:存储密码摘要”中添加一个警告:

如果您真的想要防范攻击,请确保在摘要中使用salt;如果它是一个众所周知的算法,如MD5,并且有人可以获得哈希输出,那么在他们自己的CPU时间,他们可以快速检查可能的密码,如果他们找到匹配,那么他们就有了密码。添加盐可防止此类攻击(请参阅wikipedia article)。

您可以尝试查看OpenID,因为这是一种处理身份验证的相当简单的方法。众所周知的站点(OpenID providers)为您处理身份验证,并以加密方式断言具有身份X的人员已经过适当的身份验证。然后你只需要处理允许身份X做什么的授权。您可以随时限制您信任的身份提供商(例如,您可能信任Yahoo和AOL以及Blogger,但不能信任某个随机网站,因为任何人在技术上都可以托管他们自己的身份提供商服务器。)