如何根据存储在数据库中的 ASPNET 用户和角色进行身份验证?

How do I authenticate against my ASPNET users and roles stored in my database?

我有一个 MVC 项目允许我的用户将用户和角色添加到 AspNetRolesAspNetUsers 表。该应用程序使用 Active Directory 对登录视图上的用户进行身份验证。在我的数据库中,我已将用户 user123 添加到数据库中 Administrators 的角色。我添加了以下逻辑,使此 link 对我登录部分中的 Administrators 角色可见。

@if (Roles.IsUserInRole("Administrators"))
{
    @Html.ActionLink("Manage Accounts", "Index", "Roles")
}

我还将此添加到我的 web.config 中,以尝试实例化角色提供程序与数据库的连接。

<roleManager enabled="true">
  <providers>
    <clear />
    <add connectionStringName="DefaultConnection"
         name="AspNetSqlRoleProvider"
         type="System.Web.Security.SqlRoleProvider"
         applicationName="MyApplicationName" />
  </providers>
</roleManager>

然而,我的 link 仍然对 user123 不可见,根据我的数据库,AdministratorsAdministrators 的成员。这是什么原因?

您同时混合了身份、ASP.NET 成员资格和 Windows 身份验证,所有这些在本质上都是相互不兼容的。如果您使用的是 Identity,则角色提供者等不在 window 之列。这是 ASP.NET 会员资格的全部内容,已被身份取代。 Windows Auth 也是一个完全不同的野兽,不适用于身份或 ASP.NET 成员资格提供的个人身份验证。

如果您想使用自己的身份验证系统并且您想通过 AD 进行身份验证,那么您不能使用 Windows 身份验证。相反,您必须通过 LDAP 和 运行 您的授权手动连接到您的 AD。您仍然需要系统中的实际用户记录,由 Identity 提供(因为没有人应该再使用 ASP.NET Membership),但是您不会使用 Identity 来实际验证 user/password 组合。相反,您可以通过 LDAP 执行此操作,然后只需在身份端让用户登录即可。