阻止访问 asp.net 的静态内容 - mvc 应用程序

prevent access to static content of asp.net - mvc app

我们有 asp.net MVC 和 angular 应用程序。我们正在使用 identityserver3 对应用程序进行访问控制。 一切都按预期工作,除了一件事。 未经授权的用户仍然可以访问应用程序的静态内容。

有没有办法在用户登录之前拒绝访问这些文件?

您可以将此添加到您的 web.config

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

这是伟大的 post 的 link,这让我找到了解决方案 => 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. Return 来自控制器操作的文件

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

除了位置部分,您还需要指示 IIS ASP.NET 将处理这些文件 (runAllManagedModulesForAllRequests="true")。

在(system.web 节点的兄弟姐妹)旁边:

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

在system.web服务器节点下:

<modules runAllManagedModulesForAllRequests="true">

注意:使用 users="*" 而不是 users="?"如果您不想让任何用户访问您的文件。在我的例子中,我这样做是为了防止访问我的 JS 文件,并使用捆绑包为它们提供服务。