我有一个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
的成员。造成这种情况的原因是什么?
答案 0 :(得分:1)
您正在同时混合Identity,ASP.NET Membership和Windows Auth,所有这些都本质上彼此不兼容。如果您正在使用Identity,则角色提供程序等不在窗口中。这是ASP.NET Membership的所有部分,由Identity替代。 Windows Auth也是一个完全不同的野兽,不适用于Identity或ASP.NET Membership提供的个人身份验证。
如果您想使用自己的身份验证系统和,您希望通过AD进行身份验证,则无法使用Windows身份验证。相反,您必须通过LDAP手动连接到AD并对其运行授权。您仍然需要身份提供的系统中的实际用户记录(因为没有人应该再使用ASP.NET成员身份),但您不会使用Identity来实际验证用户/密码组合。相反,您可以通过LDAP执行此操作,然后只需在身份一侧签署用户。