2012-10-09 113 views
1

是否可以根據請求的區域來設置授權?基本上它是一個Intranet類型的應用程序,只有很少的敏感信息。ASP.NET MVC - 允許內部匿名用戶,在外部需要Windows身份驗證

如果請求是從組織內部執行的,允許匿名用戶可以。

但是如果是外部請求,他們應該得到401授權挑戰。 外部請求來自單個防火牆,因此IP/IP範圍應該可以很好地指定它是外部請求還是內部請求。

目前它在web.config文件中配置爲進行Windows身份驗證。

<authentication mode="Windows" /> 
<authorization> 
    <deny users="?" /> 
</authorization> 

回答

1

直接在防火牆處理此規則會更容易。

作爲替代方案,您可以在您的IIS級別配置IP Security並通過客戶端IP進行篩選。

但如果你有防火牆無法控制,你可以寫一個自定義的授權屬性,將檢查輸入的IP地址,並允許/拒絕這個請求:

public class IpBasedAuthorizeAttribute: AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var ip = httpContext.Request.UserHostAddress; 
     return IsAllowed(ip); 
    } 

    private bool IsAllowed(string ip) 
    { 
     // TODO: do your checks here and return true or false 
     // depending on whether the IP address is allowed to 
     // access the application or not 
     throw new NotImplementedException(); 
    } 
} 

,然後你既可以裝點各個控制器/或者將其註冊爲全局授權屬性,如果您希望它適用於所有請求:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    filters.Add(new IpBasedAuthorizeAttribute()); 
} 
+0

完美!這正是我正在尋找的。謝謝! –

相關問題