我正在尝试使用.NET授权规则在IIS7中保护应用程序。
默认情况下,Web服务器允许所有用户访问(继承)。
我已经为这个应用程序目录添加了deny all users命令,以及特定用户的allow命令。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<authorization>
<allow users="myusername" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
我启用了Windows身份验证,我可以验证没有该行,我的REMOTE_USER是MYDOMAIN \ myusername。
但是,当我尝试拒绝所有用户时,系统会提示我使用典型的Windows域用户名/密码框。如果我输入用户名密码,则提示会再次返回3次,直到最后向我显示失败消息。 (我也试着无济于事)
查看事件查看器,看起来好像我的登录使用用户名和pw在审核中成功...并且为了进一步说明,我的帐户没有被锁定(如果我未能一遍又一遍地登录)。所以它好像我正在登录,但配置没有看到我输入的匹配登录信息。
以下是我看到的消息(即使使用localhost从服务器连接时):
**访问被拒绝。
描述:访问提供此请求所需的资源时发生错误。可能未配置服务器以访问请求的URL。
错误消息401.2。:未授权:由于服务器配置,登录失败。验证您是否有权根据您提供的凭据和Web服务器上启用的身份验证方法查看此目录或页面。有关其他帮助,请与Web服务器的管理员联系。**
答案 0 :(得分:9)
首先,主要问题是IIS6中还包含IIS6授权,至少在我的情况下是默认的。首先,确保已安装IIS7授权。完整的指示可以在这里找到:
http://www.iis.net/ConfigReference/system.webServer/security/authorization
出现混淆是因为在IIS7中,应用程序菜单中有一个名为“.NET授权规则”的项目(在ASP.NET部分下)。这不是您想要的IIS7授权。为此,您必须确保已安装它(请参阅上面的链接),然后单击应用程序的IIS部分下的名为“授权规则”的链接
另一个值得一提的注意事项,如果您将以下配置放在适当位置:
<configuration>
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Deny" users="unknownname" />
<add accessType="Allow" users="knownname" />
</authorization>
</security>
</system.webServer>
</configuration>
这将导致每个人被拒绝。看来,如果您拒绝不存在的用户名或角色,则拒绝每个人。如果拒绝用户被识别,那么它可以正常工作。
另外,为*指定deny并允许某些用户不起作用,它将拒绝所有用户。您只需删除*用户(如上例所示),然后只允许您的目标受众。其他人在默认情况下都被拒绝。
答案 1 :(得分:1)
在Windows Server 2012上的IIS 8中配置基本身份验证
01-Authentication-Add Features
02-Authentication-Server Roles
03-Authentication-Server Management
答案 2 :(得分:0)
您可以更改以下代码
<deny users="*" />
<allow users="myusername" />
答案 3 :(得分:0)
我花了4个小时尝试设置它(使用域名角色):)。最终的解决方案是在角色中使用域名:
`<system.web>
<authorization>
<allow roles="DOMAINNAME\rolename" />
<deny users="*" />
</authorization>
</system.web>`