使用OpenID和DotNetOpenID对ASP.NET站点中的管理员进行身份验证的安全方法

时间:2008-09-11 15:43:08

标签: asp.net openid dotnetopenauth

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

通过简单地将当前会话的“ClaimedID”(在OpenIdLogin_LoggedIn事件中返回,作为成员DotNetOpenId.RelyingParty,OpenIdEventArgs.Response.ClaimedIdentifier)与已知管理员的比较,允许/拒绝网站上的管理功能是否安全OpenID(即我的)?

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

2 个答案:

答案 0 :(得分:3)

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

我没有在我的应用中广播开放ID。它们存储在表格中。在每个动作结果上,我都在点击Users表,因为我还修改了我的存储各种用户状态信息。除了主页之外,我需要从该表中获得一些用户信息。我正在使用LINQ,所以我包含.LoadWith()以在序列化时为用户加载他的角色列表。

答案 1 :(得分:2)

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

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