使用Windows身份验证在asp.net中使用角色

时间:2017-05-12 20:27:24

标签: c# asp.net asp.net-mvc windows-authentication security-roles

我需要使用Roles.GetUsersInRole(role)方法来获取在事件发生时应该收到电子邮件的用户名。 我正在使用Windows身份验证。

在我的网站配置中:

     <system.web> 
        <authentication mode="Windows" />
        <identity impersonate="false" />
        <roleManager enabled="true"
                 defaultProvider="AspNetWindowsTokenRoleProvider"/>
...
      </system.web>

一切都编译得很好但是当我调用那个方法时我得到了这个错误:

{&#34;配置的角色提供程序(WindowsTokenRoleProvider)依赖于Windows身份验证来确定允许用户成为其成员的组。 ASP.NET角色管理器不能用于管理Windows用户和组。如果您想支持自定义用户/角色分配,请使用SQLRoleProvider。&#34;}

这是配置问题吗? 我需要继续使用Windows身份验证,但是我还需要能够从组中获取用户名。

如果没有配置设置来实现这一点是否有任何类型的工作可以让我获得这个功能?

由于

1 个答案:

答案 0 :(得分:3)

以下是一个工作示例ASP.NET MVC 4应用程序,它使用Windows身份验证和SQL Server角色提供程序。

web.config部分下的<system.web>文件中:

<roleManager  enabled="true" defaultProvider="SqlRoleProvider">
  <providers>
    <add name ="SqlRoleProvider"
   type="System.Web.Security.SqlRoleProvider"
   connectionStringName="AspNetMembershipConnString"
   applicationName="MembershipAndRoleProviderSample"/>
  </providers>
</roleManager> 

这告诉asp.net运行时使用Sql角色提供程序并指示用于查找数据库的连接字符串。

因为我们使用的是SQL Role Provider,所以我们需要一个存储用户和角色的数据库。要创建数据库,请使用aspnet_regsql.exe命令(在我的Windows 10 Pro机器上,在C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319下),该命令允许创建包含用户和角色的模式。

注意:通过此工具创建架构时,请确保数据库名称与web.config文件中的连接字符串中的名称相同(接下来会出现)。

返回web.config文件添加连接字符串

 <connectionStrings>    
    <add connectionString="DATA SOURCE = PersonalLaptop\SQLEXPRESS2014; INITIAL CATALOG = AspNetMembership; INTEGRATED SECURITY = SSPI;"
          name="AspNetMembershipConnString" providerName="System.Data.SqlClient"/>
  </connectionStrings>

确保连接字符串的名称与sql role provider部分中的名称相同。

注意:您不需要会员提供商,因为您使用的是集成Windows身份验证模式。

创建角色并添加用户

有两种方法可以做到这一点。

<强> 1) 打开SQL数据库,其中aspnet_regsql.exe创建了表和存储过程。在aspnet_Usersaspnet_Applicationsaspnet_UsersInRolesaspnet_Roles表中创建新记录。由于您使用的是Windows身份验证,因此请确保在aspnet_Users表中添加Windows用户名(完全限定域名/本地用户名)。

<强> 2) 在HomeController的Index方法中使用代码:

Roles.CreateRole("SuperDuperUsers");
Roles.AddUserToRole("<WindowsUserName>", "SuperDuperUsers");

这将创建角色,用户将被添加到该角色中。

我已经在github上为你上传了示例asp.net mvc 4 application here

在github repo中,SqlScriptOfTheDatabase.sql文件包含为存储用户和角色及其关系而创建的模式。您可以使用此而不是使用 如果你想要aspnet_regsql.exe命令。

希望这有帮助!