2

是否有任何用于身份验证/授权模式的最佳实践数据模型?

4

3 回答 3

4

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

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

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

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

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

我还将扩展“不存储密码”的答案——根本不要设计自己的身份验证方案。你可能会弄错。重复使用经过验证的。

于 2008-12-19T16:50:40.763 回答
2

最重要的是

不要存储密码

存储密码摘要。请参阅RFC 2069和此Wikipedia 文章。当有人尝试进行身份验证时,您将他们输入的摘要与您必须查看他们的凭据是否匹配的摘要进行比较。

于 2008-12-19T16:38:56.093 回答
1

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

如果您真的想防止攻击,请确保在摘要中使用;如果它是像 MD5 这样的著名算法,并且有人可以掌握哈希输出,那么他们可以在自己的 CPU 时间上快速检查可能的密码,如果他们找到匹配项,那么他们就获得了密码。添加盐可以防止这种攻击(参见维基百科文章)。

您可以尝试查看OpenID,因为它是处理身份验证的一种相当简单的方法。知名站点(OpenID提供者)为您处理身份验证,并以密码方式断言具有身份 X 的人已正确进行身份验证。然后你只需要处理授权哪些身份 X 被允许做什么。您始终可以限制您信任的身份提供者(例如,您可能信任 Yahoo、AOL 和 Blogger,但不信任某些随机站点,因为从技术上讲,任何人都可以托管自己的身份提供者服务器)。

于 2008-12-19T17:08:23.863 回答