我有一个MVC项目,它允许我的用户将用户和角色添加到AspNetRoles
和AspNetUsers
表中。应用程序使用Active Directory对登录视图中的用户进行身份验证。在我的数据库中,我已将用户user123
添加到数据库中Administrators
的角色中。我添加了以下逻辑,使该链接对登录部分中的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>
然而,user123
仍然看不到我的链接,根据我的数据库,他是Administrators
的成员。这是什么原因造成的?
您同时混合了Identity、ASP.NET Membership和Windows Auth,所有这些都天生不兼容。如果您使用的是Identity,那么角色提供程序等就不在窗口中了。这都是ASP.NET Membership的一部分,它已被Identity取代。Windows Auth也是一个完全不同的野兽,它不适用于Identity或ASP.NET Membership提供的个人身份验证。
如果您想使用自己的身份验证系统,并且您想通过AD进行身份验证,则不能使用Windows身份验证。相反,您必须通过LDAP手动连接到您的AD,并根据它运行授权。您仍然需要系统中由Identity提供的实际用户记录(因为任何人都不应该再使用ASP.NET Membership(,但您不会使用Identity来实际验证用户/密码组合。相反,您可以通过LDAP来完成此操作,然后只需在Identity端为用户登录即可。