2015-11-10 1 views
1

Я хотел был бы защитить архивы в директории с следующим в моем web.config - но я также хочу сделать исключение, так что один конкретный IP можно получить доступ к содержимому без регистрации.web.config - как разрешить конкретный IP-адрес без разрешения <deny users = "*" />

<configuration> 
<system.web> 
    <authorization> 

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

Как это может быть сделано?

+0

Возможный дубликат: http://stackoverflow.com/questions/2337842/is-it-possible-to-configure-a-location-in-web-config-to-only-allow-local-connect –

+0

I заглянули в ipsecurity, но я хочу объединить два метода, я хочу, чтобы это было так: Если запрос исходит от одного конкретного IP-адреса, доступ всегда будет предоставляться из всех других IP-адресов, которые должны быть зарегистрированы пользователем in и член одной из групп, определенных в разделе авторизации – user3279044

ответ

2

Существует нет встроенного способа, позволяющего это сделать, но я думаю, вы должны иметь возможность написать быстрый модуль, который предоставляет «IP-аутентификацию», и это позволит вам иметь это в дополнение к другим модулям аутентификации и в зависимости от того, обеспечивает Идентичность.

Например, вот быстрый пример:

public class 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(',').Select((ip) => 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(
        new GenericIdentity(clientIP, "Basic"), 
        new string[] { "IPAddressRole" }); 
      } 
     } 
    } 
} 

затем в вашем web.config настроить модуль, а также IPaddresses позволили, например:

<appSettings> 
    <add key="ipAddresses" value="127.0.0.1,::1"/> 
    </appSettings> 
    <system.webServer> 
    <modules> 
     <add name="IPAuthenticationModule" type="IPAuthenticationModule, YourDLLName"/> 
    </modules> 
    <security> 
     <authorization> 
     <add accessType="Deny" users="?" /> 
     </authorization> 
    </security> 
    </system.webServer> 

Это позволит доступ до 127.0.0.1 и ввести роль «IPAddressRole» в идентификаторе, чтобы вы могли даже предоставить доступ выше, а также ограничить/разрешить разные уровни доступа на основе той роли, которая представляет IP. Он также будет использовать имя пользователя в качестве IP-адреса, поэтому в журналах и все это вы увидите.

Смежные вопросы