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

时间:2016-06-24 17:12:11

标签: asp.net-mvc asp.net-identity asp.net-roles

我有一个MVC项目允许我的用户将用户和角色添加到AspNetRolesAspNetUsers表。该应用程序使用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的成员。造成这种情况的原因是什么?

1 个答案:

答案 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执行此操作,然后只需在身份一侧签署用户。