阻止访问asp.net的静态内容 - mvc app

时间:2016-03-31 13:08:47

标签: angularjs asp.net-mvc iis owin identityserver3

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

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

3 个答案:

答案 0 :(得分:2)

这是指向我的解决方案的好帖子的链接=> 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 :(得分:1)

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

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

答案 2 :(得分:0)

除了位置部分,您还需要指明IIS将处理这些文件的IIS( runAllManagedModulesForAllRequests =&#34; true&#34; )。

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

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

在system.webServer节点下:

<modules runAllManagedModulesForAllRequests="true">

注意:使用users =&#34; *&#34;而不是用户=&#34;?&#34;如果您不想让任何用户访问您的文件。在我的情况下,我这样做是为了防止访问我的JS文件,并使用bundle来提供它们。