是否有针对身份验证/授权架构的最佳实践数据模型?
答案 0 :(得分:4)
由角色到权限的映射组成的数据模型非常灵活,适合大多数用途。
然后您将角色分配给用户(概念基本上与组的角色相同)...用户可能有多个角色,他们的角色定义了他们拥有的权限。
在代码中,您检查(通过他们的角色)用户拥有执行功能所需的权限。
身份验证是独立的,它只是验证用户是谁,而不是他们能做什么。通常你应该保持这种分离(虽然有一些方案被设计成只关心用户可以做什么,而不是他们是谁)。
在您的设计中,您可以将访问控制系统可视化为矩阵(特权角色)。
我还会扩展'不存储密码'的答案 - 根本不设计自己的身份验证方案。你可能会弄错。重用一个经过验证的。
答案 1 :(得分:2)
答案 2 :(得分:1)
我将在S.Lott回答“不存储密码:存储密码摘要”中添加一个警告:
如果您真的想要防范攻击,请确保在摘要中使用salt;如果它是一个众所周知的算法,如MD5,并且有人可以获得哈希输出,那么在他们自己的CPU时间,他们可以快速检查可能的密码,如果他们找到匹配,那么他们就有了密码。添加盐可防止此类攻击(请参阅wikipedia article)。
您可以尝试查看OpenID,因为这是一种处理身份验证的相当简单的方法。众所周知的站点(OpenID providers)为您处理身份验证,并以加密方式断言具有身份X的人员已经过适当的身份验证。然后你只需要处理允许身份X做什么的授权。您可以随时限制您信任的身份提供商(例如,您可能信任Yahoo和AOL以及Blogger,但不能信任某个随机网站,因为任何人在技术上都可以托管他们自己的身份提供商服务器。)