在Asp.Net Core中使用中间件保护非公开文件

  • 时间:
  • 浏览:3

第三步是对结果进行处里,以后失败了就阻止文件的下载:

对于大伙的需求,大伙还我不多 使用Controller/Action直接实现,原来比较简单,这俩 难以复用,以后在其它项目中使用只有好友克隆代码。

测试方式 :

上一小节中IFileAuthorizationHandlerProvider 是用于提供Handler的,没法 为那先 要将存储装入Options里呢?

以后这篇文章对你有用,那就给我点个赞吧:D

只有请求是特定格式时才会进入到文件授权上边件,累似 大伙将其设计为原来

要达到上述效果要编写一一一三个白 多多类:

没法 对应的请求就以后是:

这里的 AuthorizationScheme 对应,上文中的上边件标记,FileRootPath 代表文件根目录的绝对路径,AuthorizeAsync方式 则用于切实的认证,并返回一一一三个白 多多认证的结果

这是Asp.Net Core中的另一重要功能,以后你不了解它我就我不多 太在意,以后此处影响不大,不过以后你想学习它,没法 我就参考ASP.NET Core 中的请求功能文档

首先大伙是先请求了IHttpSendFileFeature,以后有一句话直接使用它来发送文件

要先写一一一三个白 多多测试用的Handler,这俩 Handler允许任何用户访问文件:

最后最后,在企业开发中大伙只有检测用户上传文件的真实性,以后通过文件扩展名确认,显然不靠谱,什么都有大伙得用其它方式 ,以后你删改后会相关的问題,我不多 参考我的另外一篇博客在.NetCore中使用Myrmec检测文件真实格式

第一步,确认文件的删改路径:

大伙的区分方式 是使用路径,累似 本文例使用

以后授权逻辑以后提取到 IFileAuthorizationServiceIFileAuthorizationHandler中,什么都有上边件所负责的功能就很少,主什么都有接受请求和向客户端写入文件。

第一一一三个白 多多用于实现services.AddFileAuthorization(options =>...

在本文例中大伙将所有的文件(无论来自哪个上传功能)都装入一一一三个白 多多根目录下累似 :C:xxx-uploads(windows),这俩 目录不由StaticFile上边件管控

这主次主要作用是实现加进handler的方式 ,加进的handler是瞬时的

判断的方式 是检查Url中的第一段是删改后会等于AuthorizationScheme(累似 :files)

第二步是调用IFileAuthorizationService进行授权

理解接下来的内容只有上边件知识,以后你不须熟悉上边件没法 请先学习上边件

我就参看ASP.NET Core 上边件文档进行学习

接下来大伙先贴出删改的Invoke方式 ,再逐步解析:

到此处,大伙的上边件就完成了。

就原来一一一三个白 多多场景,用户上传的文件只有有这俩人看得见(我不多 访问)

以后,不支持IHttpSendFileFeature 没法 就使用原始的方式 将文件写入请求体:

地三个白 用于实现app.UseFileAuthorization();

以后成功则,向响应中写入文件:

写入文件相对前面的逻辑稍稍错综复杂这俩 ,但其实也很简单,大伙并肩来看一下

在企业开发中,大伙老要会遇到由用户上传文件的场景,比如某OA系统中,由用户填写某表单并上传身份证,由身份管理员审查,超级管理员我不多 查看。

FileAuthorizationOptions的主要责任是确认相关选项,累似 :FileRootPath和AuthorizationScheme。以及存储 handler标记与Handler类型的映射。

这俩 主要作用是将上边件装入管道,很简单

授权过程总共分三步:

到这里,所有的代码就完成了

删改方式 如下:

最重要的主次是 授权方式 的实现:

这里给出代码片段中用到的一一一三个白 多多私有方式 :

没法 ,这篇博客中大伙将并肩学习如保设计并实现一款文件授权上边件

第二步,检查文件是否发生:

第一一一三个白 多多用于实现.AddHandler<TestHandler>("id-card");

这主次是注册服务,将IFileAuthorizationServiceIFileAuthorizationService注册为单例

第一主次是AuthorizationScheme和FileRootPath

这俩 测试如期通过,本例中还写了其它诸多测试,就不一一贴出了,另外,这俩 项目目前已上传到我的github上了,只有代码的同学自取

这是一一一三个白 多多典型的 Service-Handler模式,当请求到达文件授权上边件时,上边件让FileAuthorizationService根据请求形态挑选该请求属于的Handler,并执行授权授权任务,获得授权结果,文件授权上边件根据授权结果来挑选向客户端返回文件还是返回其它未授权结果。

最后一步写入文件:

由StaticFile上边件处里的文件删改后会公开的,由这俩 上边件处里的文件只有是公开的js、css、image等等我不多 由任何人访问的文件

一一一三个白 多多企业系统中上传文件的功能以后有什么都有:

要想文件我不多 被授权,文件的命名就要有规律,大伙我不多 从文件命名中挑选文件是属于谁的,累似 本文例我不多 设计文件名为原来

第一步是获取请求的Url这俩 判断这俩 请求是否属于当前的文件授权上边件

这俩 步什么都有判断和确认最终的文件路径

你我不多 能直接使用Nuget获取这俩 上边件:

https://github.com/rocketRobin/FileAuthorization

欢迎转载,转载请注明原作者和出处,谢谢

最终的使用效果累似 原来:

Install-Package FileAuthorization

Install-Package FileAuthorization.Abstractions

大伙来编写个简单的测试来测试上边件的运行效果

这上边 files是作用于上边件的标记,id-card用于确认由IdCardHandler处里,上边的内容用于确认上传者的身份

阻止的方式 是返回 403,未授权的HttpCode

其实大伙的上边件和授权服务都写完了,这俩 似乎还只有直接用,什么都有接下来大伙来编写相关的扩展方式 ,让其切实的运行起来

愿因分析如下:

这俩 类的功能什么都有存储 handler标记与Handler类型的映射

IFileAuthorizeHandler 假使 求一一一三个白 多多多方式 ,即授权的方式

累似 : 3000211-4738B54D33009410CBC785BCD1963F3FA-Front,这代表由3000211上传的身份证正面

前文提到,大伙设计的是将文件删改存储到一一一三个白 多多目录下,但事实上大伙不原来做我不多 能,假使 负责授权的handler将请求映射成删改的物理路径就行,原来,在未来删改后会更多的扩展性,比如某功能的文件没法 存储在统一的目录下,没法 我不多 能。