如何根据存储在数据库中的 ASPNET 用户和角色进行身份验证?
How do I authenticate against my ASPNET users and roles stored in my database?
我有一个 MVC 项目允许我的用户将用户和角色添加到 AspNetRoles
和 AspNetUsers
表。该应用程序使用 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
不可见,根据我的数据库,Administrators
是 Administrators
的成员。这是什么原因?
您同时混合了身份、ASP.NET 成员资格和 Windows 身份验证,所有这些在本质上都是相互不兼容的。如果您使用的是 Identity,则角色提供者等不在 window 之列。这是 ASP.NET 会员资格的全部内容,已被身份取代。 Windows Auth 也是一个完全不同的野兽,不适用于身份或 ASP.NET 成员资格提供的个人身份验证。
如果您想使用自己的身份验证系统并且您想通过 AD 进行身份验证,那么您不能使用 Windows 身份验证。相反,您必须通过 LDAP 和 运行 您的授权手动连接到您的 AD。您仍然需要系统中的实际用户记录,由 Identity 提供(因为没有人应该再使用 ASP.NET Membership),但是您不会使用 Identity 来实际验证 user/password 组合。相反,您可以通过 LDAP 执行此操作,然后只需在身份端让用户登录即可。
我有一个 MVC 项目允许我的用户将用户和角色添加到 AspNetRoles
和 AspNetUsers
表。该应用程序使用 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
不可见,根据我的数据库,Administrators
是 Administrators
的成员。这是什么原因?
您同时混合了身份、ASP.NET 成员资格和 Windows 身份验证,所有这些在本质上都是相互不兼容的。如果您使用的是 Identity,则角色提供者等不在 window 之列。这是 ASP.NET 会员资格的全部内容,已被身份取代。 Windows Auth 也是一个完全不同的野兽,不适用于身份或 ASP.NET 成员资格提供的个人身份验证。
如果您想使用自己的身份验证系统并且您想通过 AD 进行身份验证,那么您不能使用 Windows 身份验证。相反,您必须通过 LDAP 和 运行 您的授权手动连接到您的 AD。您仍然需要系统中的实际用户记录,由 Identity 提供(因为没有人应该再使用 ASP.NET Membership),但是您不会使用 Identity 来实际验证 user/password 组合。相反,您可以通过 LDAP 执行此操作,然后只需在身份端让用户登录即可。