2016-03-31 81 views
1

我們有asp.net MVC &角應用程序。我們正在使用identityserver3來對應用程序進行訪問控制。 除了一件事外,一切都按預期工作。 未經授權的用戶仍然可以訪問應用程序的靜態內容。阻止訪問asp.net的靜態內容 - mvc應用程序

在用戶登錄之前是否有任何方式拒絕訪問這些文件?

回答

0

這裏是鏈接到偉大的職位而導致我的解決方案=> Intercepting file requests

步驟我已經採取瞭解決我的問題:

  1. 將此行添加到我的webconfig文件中。 這將確保js文件請求不會被處理程序處理。

    <system.webServer> 
        <handlers> 
         <add name="JSFileHandler" path="*.js" verb="GET" 
          type="System.Web.Handlers.TransferRequestHandler"  
          preCondition="integratedMode,runtimeVersionv4.0" /> 
        </handlers> 
    </system.webServer> 
    
  2. 註冊路線。

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    
        routes.RouteExistingFiles = true; 
        routes.MapRoute(
         "staticfiles" 
         , "{*src}" 
         , new { Controller = "Main", action = "GetJS" } 
         , new { src = @"(.*?)\.(js)" }      // URL constraints 
        ); 
    
  3. 從控制器動作返回文件

    public ActionResult GetJS() 
    { 
    
        var path = this.Url.RouteUrl("staticfiles"); 
        return File(path, 
         System.Net.Mime.MediaTypeNames.Application.Octet, 
         Path.GetFileName(path)); 
    } 
    
1

您可以添加到您的web.config

<location path="your/path/tostaticfiles">  
    <system.web> 
     <authorization>     
     <deny users="?" /> //Denies unauthorized users 
     </authorization> 
    </system.web> 
</location> 
+0

使用表單認證它的作用就像一個魅力,但在這種情況下,它似乎沒有任何效果。 – piowtarn

+0

此外,這隻適用於在IIS處理程序映射中將類型映射到.NET的文件。例如,jpg文件不是默認的,IIS會在將請求路由到.NET之前提供它們。 – esmoore68

0

除了位置部分,您還需要指出的是IIS ASP.NET將處理這些文件(runAllManagedModulesForAllRequests = 「真」 )。

下一步(的System.Web節點的兄弟姐妹):

<location path="Scripts"> 
    <system.web> 
     <authorization> 
     <deny users="?" /> 
     </authorization> 
    </system.web> 
    </location> 

在system.webServer節點:

<modules runAllManagedModulesForAllRequests="true"> 

注: 「?」 使用用戶= 「*」,而不是用戶=如果你不想讓任何用戶訪問你的文件。在我的情況下,我做到了這一點,以防止訪問我的JS文件,我用捆綁服務他們。

相關問題