我们有asp.net MVC&角度应用。我们使用identityserver3对应用程序进行访问控制。 除了一件事,一切都按预期工作。 未经授权的用户仍然可以访问应用程序的静态内容。
在用户登录之前有没有办法拒绝访问这些文件?
答案 0 :(得分:2)
这是指向我的解决方案的好帖子的链接=> Intercepting file requests
我已采取措施解决我的问题:
将此行添加到我的webconfig文件中。 这将确保js文件请求不会被处理程序处理。
<system.webServer>
<handlers>
<add name="JSFileHandler" path="*.js" verb="GET"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
注册路线。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.RouteExistingFiles = true;
routes.MapRoute(
"staticfiles"
, "{*src}"
, new { Controller = "Main", action = "GetJS" }
, new { src = @"(.*?)\.(js)" } // URL constraints
);
从控制器操作返回文件
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来提供它们。