使用带有DotNetOpenID的OpenID的ASP.NET站点中的管理员身份验证的安全方法

时间:2020-03-05 18:51:36  来源:igfitidea点击:

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

我是否可以通过简单地将当前会话的" ClaimedID"(作为OpenIdLogin_LoggedIn事件的返回值,作为成员DotNetOpenId.RelyingParty,OpenIdEventArgs.Response.ClaimedIdentifier)与已知管理员的OpenID(即ID)进行比较来允许/拒绝站点上的管理功能?矿)?

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

解决方案

回答

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

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

回答

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

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