在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返回视频内容,完全控制访问权限:
- 创建
VideoController控制器:
public class VideoController : Controller { [Authorize] // 仅允许已登录用户访问 public ActionResult Index() { var videoPath = Server.MapPath("~/video/index.m3u8"); return File(videoPath, "application/x-mpegURL"); } }
- 修改前端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
相关产品推荐
相关产品推荐

