使用 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_Users
、aspnet_Applications
、aspnet_UsersInRoles
和 aspnet_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
如果需要,命令。
希望对您有所帮助!
我需要使用 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_Users
、aspnet_Applications
、aspnet_UsersInRoles
和 aspnet_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
如果需要,命令。
希望对您有所帮助!