【问题标题】:secure way to authenticate administrator in ASP.NET site using OpenID with DotNetOpenID在 ASP.NET 站点中使用 OpenID 和 DotNetOpenID 对管理员进行身份验证的安全方法
【发布时间】:2026-01-12 21:35:02
【问题描述】:

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

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

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

【问题讨论】:

  • 您是说 WebForms 而不是 WinForms?

标签: asp.net openid dotnetopenauth


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    Jarrett 提出了一些关于使用数据库表的好方法。

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

    【讨论】:

      最近更新 更多