我的问题很简单。我在Windows 7上有一个帐户“saqib”。我在“管理员”组中添加了此帐户。现在我的要求是我希望“saqib”访问我的asp.net应用程序中的管理页面。我在IIS-7中启用了Windows身份验证并禁用了匿名身份验证。我在我的应用程序中添加了一个带有管理页面的文件夹。我还在此文件夹中添加了一个web.config文件并添加了这些设置。
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow roles="Administrators"/>
<deny users="*"/>
</authorization>
</system.web>
</configuration>
现在,当我想通过输入用户名“saqib”和我的密码来访问此管理页面时,我无法访问我的管理页面。为什么???
虽然我可以使用内置在“管理员”帐户中的窗口访问该管理页面,该帐户在web.config文件中具有相同的设置。为什么会这样?
请查看此tutorial on MSDN以更好地理解您的代码。 主要问题是您没有机会让您的管理员帐户进行验证 - 您只是拒绝最后一行中的所有用户。
所以你必须使用<deny users="?" />
,如@Dust提到的,但不是代替<deny users="*" />
,而是在所有指令之前,如下所示:
<authorization>
<deny users="?" />
<allow roles="Administrators" />
<deny users="*" />
</authorization>
另外,请确保您提供了authentication
元素,用于为您的应用程序设置auth模式,例如:
<authentication mode="Forms" >
<forms loginUrl="login.aspx" name=".ASPXFORMSAUTH" />
</authentication>
不应该是<deny users="?" />
。你正在做的事情令人困惑,因为你否认了所有用户,但Admin的角色也是一个用户,因此它无法正常工作。
问题出在Windows UAC上。即使登录帐户是管理员,UAC也会阻止管理员权限,这就是您在安装某些软件并需要提升到管理员时获取弹出窗口并以常规用户身份运行管理员用户的原因。
我在stackoverflow中找到了一些解决同样问题的工作,但从来没有让它在web.config中运行。 In .NET/C# test if process has administrative privileges