我试图使用.NET授权规则在IIS7中保护应用程序.
默认情况下,Web服务器允许所有用户访问(继承).
我已经为这个应用程序目录添加了拒绝所有用户命令,以及特定用户的allow命令.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<authorization>
<allow users="myusername" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我启用了Windows身份验证,我可以验证没有我的REMOTE_USER是MYDOMAIN\myusername的行.
但是,当我尝试拒绝所有用户时,系统会提示我使用典型的Windows域用户名/密码框.如果我输入用户名密码,则提示会再次返回3次,直到最后向我显示失败消息.(我也试着无济于事)
查看事件查看器,看起来好像我的登录使用用户名和pw在审核中成功...并且为了更进一步,我的帐户没有被锁定(如果我没有登录并且过度).所以就好像我正在登录,但是配置没有看到我输入的匹配我的登录信息.
以下是我看到的消息(即使使用localhost从服务器连接时):
**访问被拒绝.
描述:访问提供此请求所需的资源时发生错误.可能未配置服务器以访问请求的URL.
错误消息401.2.:未授权:由于服务器配置登录失败.验证您是否有权根据您提供的凭据和Web服务器上启用的身份验证方法查看此目录或页面.请与Web服务器的管理员联系以获取其他帮助.**
首先,主要问题是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>
Run Code Online (Sandbox Code Playgroud)
这将导致每个人被拒绝.看来,如果您拒绝不存在的用户名或角色,则拒绝每个人.如果拒绝用户被识别,那么它可以正常工作.
此外,指定拒绝*和允许某些用户将无法工作,它将拒绝所有.您只需删除*用户(如上例所示),然后只允许您的目标受众.默认情况下,其他所有人都被拒绝.
| 归档时间: |
|
| 查看次数: |
17021 次 |
| 最近记录: |