使用 asp.net 中的角色和 windows 身份验证

using roles in asp.net with windows authentication

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

在我的网络配置中:

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

一切都可以正常编译,但是当我调用该方法时出现此错误:

{"The configured Role Provider (WindowsTokenRoleProvider) relies upon Windows authentication to determine the groups that the user is allowed to be a member of. ASP.NET Role Manager cannot be used to manage Windows users and groups. Please use the SQLRoleProvider if you would like to support custom user/role assignment."}

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

如果没有配置设置来实现此功能,是否有任何变通方法可以获得此功能?

谢谢

这是一个工作示例 ASP.NET MVC 4 应用程序,它使用 windows 身份验证和 SQL 服务器角色提供程序。

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 角色提供程序部分中的名称相同。

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

创建角色并添加用户

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

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

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

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

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

我已经在 github 上为您上传了示例 asp.net mvc 4 应用程序 here

在 github 存储库中,SqlScriptOfTheDatabase.sql 文件包含为存储用户和角色及其关系而创建的架构。您可以使用它而不是使用 aspnet_regsql.exe 如果需要,命令。

希望对您有所帮助!