是否有任何用于身份验证/授权模式的最佳实践数据模型?
3 回答
由角色到权限的映射组成的数据模型相当灵活,适合大多数用途。
然后你将角色分配给用户(这个概念与组的概念本质上相同)......一个用户可能拥有多个角色,并且他们的角色定义了他们拥有的权限。
在代码中,您(通过他们的角色)检查用户是否拥有执行功能所需的权限。
身份验证是分开的,这只是验证用户是谁,而不是他们可以做什么。通常你应该保持这种分离(尽管有些方案被设计成只关心用户可以做什么,而不关心他们是谁)。
在您的设计中,您可以将访问控制系统可视化为一个矩阵(角色到权限)。
我还将扩展“不存储密码”的答案——根本不要设计自己的身份验证方案。你可能会弄错。重复使用经过验证的。
我将在 S.Lott 对“不存储密码:存储密码摘要”的回答中添加一个警告:
如果您真的想防止攻击,请确保在摘要中使用盐;如果它是像 MD5 这样的著名算法,并且有人可以掌握哈希输出,那么他们可以在自己的 CPU 时间上快速检查可能的密码,如果他们找到匹配项,那么他们就获得了密码。添加盐可以防止这种攻击(参见维基百科文章)。
您可以尝试查看OpenID,因为它是处理身份验证的一种相当简单的方法。知名站点(OpenID提供者)为您处理身份验证,并以密码方式断言具有身份 X 的人已正确进行身份验证。然后你只需要处理授权哪些身份 X 被允许做什么。您始终可以限制您信任的身份提供者(例如,您可能信任 Yahoo、AOL 和 Blogger,但不信任某些随机站点,因为从技术上讲,任何人都可以托管自己的身份提供者服务器)。