web.config - 如何允许<deny users =“*”>的特定IP无关

时间:2015-11-10 15:04:25

标签: asp.net iis web-config

我想在web.config中使用以下内容保护目录中的文件 - 但我也想做一个例外,这样一个特定的IP就可以在不登录的情况下访问内容。

<configuration>
<system.web>
    <authorization>

        <allow roles="Role 1" />
        <allow roles="Role 2" />
        <deny users="*" />
    </authorization>
</system.web>

怎么办呢?

1 个答案:

答案 0 :(得分:2)

没有内置的方法可以允许,但我认为你应该能够编写一个快速模块,提供“IP身份验证”,这将允许你除了其他身份验证模块之外,还有任何提供身份的模块工作。 例如,这是一个快速示例: 公共类IPAuthenticationModule:IHttpModule {     private IPAddress [] ipAddresses = {};     public void Dispose(){     }     public void Init(HttpApplication context){         string s = ConfigurationManager.AppSettings [“ipAddresses”];         if(!string.IsNullOrWhiteSpace(s)){             this.ipAddresses = s.Split(',')。选择((ip)=&gt; IPAddress.Parse(ip.Trim()))。ToArray();         }         context.AuthenticateRequest + = OnContextAuthenticateRequest;     }     private void OnContextAuthenticateRequest(object sender,EventArgs e){         HttpApplication app =(HttpApplication)sender;         HttpContext context = app.Context;         if(context.User == null){             string clientIP = context.Request.UserHostAddress;             IPAddress clientIPAddress = IPAddress.Parse(clientIP);             if(this.ipAddresses.Contains(clientIPAddress)){                 context.User = new GenericPrincipal(                     新的GenericIdentity(clientIP,“Basic”),                     new string [] {“IPAddressRole”});             }         }     } } 然后在你的web.config中配置模块以及允许的ipAddresses,例如:   &LT;&的appSettings GT;     &lt; add key =“ipAddresses”value =“127.0.0.1,:: 1”/&gt;   &LT; /&的appSettings GT;   &LT; system.webServer&GT;     &LT;模块&gt;       &lt; add name =“IPAuthenticationModule”type =“IPAuthenticationModule,YourDLLName”/&gt;     &LT; /模块&gt;     &LT;安全&GT;       &LT;授权&GT;         &lt; add accessType =“Deny”users =“?” /&GT;       &LT; /授权&GT;     &LT; /安全&GT;   &LT; /system.webServer> 这将允许访问127.0.0.1,并在标识中注入“IPAddressRole”角色,因此您甚至可以提供上述访问权限,并根据代表IP的角色限制/允许不同的访问级别。它还将使用用户名作为IP地址,因此在日志中您将看到所有内容。