3

在 SO 的鼓励下,我正在尝试编写一个使用 OpenID 进行用户身份验证的 ASP.NET 站点。这是一个常规的 WinForms 站点(不是 MVC.NET),使用DotNetOpenId库进行身份验证。

通过简单地将当前会话的“ClaimedID”(在 OpenIdLogin_LoggedIn 事件中返回,作为成员 DotNetOpenId.RelyingParty,OpenIdEventArgs.Response.ClaimedIdentifier)与已知管理员的 OpenID(即矿)?

如果是这样,这个 ID 是可见的(例如在开源代码中)是否安全,还是应该“隐藏”在配置文件或数据库行中?(我知道让它可配置的设计更好,我的问题只是关于安全性。)

4

2 回答 2

3

我的解决方案是遵循 Roles 表的相同想法。对用户进行身份验证后,查找该用户的角色。如果用户在 UserRoles 表中具有“管理员”角色,那么他们可以执行管理员可以执行的任何操作。

我不在我的应用程序中广播开放 ID。它们存储在表中。在每个操作结果上,我都会点击用户表,因为我还修改了我的表以存储各种用户状态信息。除了主页,我需要从该表中获取一些用户信息。我正在使用 LINQ,因此我包含 .LoadWith() 以在用户序列化时将其角色列表加载到用户中。

于 2008-09-11T16:38:42.987 回答
2

Jarrett 对使用数据库表做了一些很好的评论。

只是为了回答您的另一个问题,不,通常将您的 OpenID 放入您的代码中并不是保密的事情。如果为您的站点设置角色似乎有点过分,那么对您的 ClaimedIdentifier 进行简单的相等性检查就完美了。

于 2008-12-17T04:43:37.227 回答