You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在IIS服务器与带Identity的MVC应用中阻止文件直接URL访问

解决MVC中HLS视频文件的身份验证访问控制问题

问题原因

你之前在<system.web>里配置的授权规则仅对ASP.NET处理的资源(如控制器、视图)生效,而.m3u8这类静态文件默认由IIS直接响应,不会经过ASP.NET的身份验证管道,所以规则无法作用于该文件。

解决方案一:让静态文件走ASP.NET管道

修改web.config,添加配置让.m3u8文件通过ASP.NET处理,这样Identity的验证逻辑就能覆盖到:

<system.webServer>
  <handlers>
    <add name="M3u8Handler" path="*.m3u8" verb="*" type="System.Web.StaticFileHandler" modules="ManagedPipelineHandler" resourceType="File" requireAccess="Read" />
  </handlers>
</system.webServer>

再针对video目录补充精准的授权规则:

<location path="video">
  <system.web>
    <authorization>
      <deny users="?" />
      <allow users="*" />
    </authorization>
  </system.web>
</location>

设置完成后,所有访问video目录下的资源(包括.m3u8)都需经过身份验证,未登录用户会被拦截。

解决方案二:用MVC Action代理视频请求(更安全灵活)

放弃直接暴露静态文件路径,改用控制器Action返回视频内容,完全控制访问权限:

  1. 创建VideoController控制器:
public class VideoController : Controller
{
    [Authorize] // 仅允许已登录用户访问
    public ActionResult Index()
    {
        var videoPath = Server.MapPath("~/video/index.m3u8");
        return File(videoPath, "application/x-mpegURL");
    }
}
  1. 修改前端video标签的src路径:
<video id="videojs-hls-quality-selector-player" class="video-js vjs-default-skin" width="640" height="360" controls>
    <source src="@Url.Action("Index", "Video")" type="application/x-mpegURL">
</video>

这种方式下,所有视频请求都会经过Authorize特性验证,确保只有登录用户能获取视频内容,同时静态文件的物理路径不会暴露给前端,安全性更高。

内容的提问来源于stack exchange,提问作者Ahmed Ramadan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:40:25