我有一个asp.net应用程序,只有当用户通过Active Directory Group" Admin"进行访问时才可用。如果未经过身份验证,应用程序将调用Account / Login.aspx文件。我遇到一个问题,即身份验证后没有任何角色从我的登录状态返回。
以下是我的Web.Config
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="10" path="/" />
</authentication>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</authorization>
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
<providers>
<add name="AspNetActiveDirectoryMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider,System.Web, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" connectionUsername="username" connectionPassword="password" connectionProtection="None" />
</providers>
</membership>
<roleManager enabled="true"/>
我在我的site.Master中放了一些代码,用于显示用户以及是否在角色中。
lblUserName.Text = "Hello " + Context.User.Identity.Name + ".";
lblAuthType.Text = "Is Admin? " + Context.User.IsInRole("Admin").ToString();
返回值是Hello Name是Admin?假
记录时,只要输入错误的ID和密码,编辑就可以正常工作。此外,在调试时,我查看Context.User for Roles,值为Blank。
感谢任何帮助。
*每个回复的跟进:*
我在web.config中插入了这个
<roleManager defaultProvider="WindowsProvider" enabled="true" cacheRolesInCookie="false">
<providers>
<add
name="WindowsProvider"
type="System.Web.Security.WindowsTokenRoleProvider" />
</providers>
</roleManager>
代码
lblAuthType.Text =&#34;是管理员吗? &#34; + Context.User.IsInRole(&#34; Admin&#34;)。ToString();
错误消息:
仅当用户名参数与当前Windows标识中的用户名匹配时,才支持方法。
堆栈跟踪
[ProviderException: Method is only supported if the user name parameter matches the user name in the current Windows Identity.]
System.Web.Security.WindowsTokenRoleProvider.GetCurrentWindowsIdentityAndCheckName(String userName) +2256845
System.Web.Security.WindowsTokenRoleProvider.GetCurrentTokenAndCheckName(String userName) +36
System.Web.Security.WindowsTokenRoleProvider.GetRolesForUser(String username) +61
System.Web.Security.RolePrincipal.IsInRole(String role) +9864880
DelegatePager.SiteMaster.Page_Init(Object sender, EventArgs e) in c:\Source\IMS Web Internal\DelegatePager\DelegatePager\Site.Master.cs:55
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
System.Web.UI.Control.OnInit(EventArgs e) +92
System.Web.UI.UserControl.OnInit(EventArgs e) +83
System.Web.UI.Control.InitRecursive(Control namingContainer) +134
System.Web.UI.Control.InitRecursive(Control namingContainer) +290
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +489