.net core webapi带权限的文件下载方法

众所周知,在webapi中,若是有个接口须要权限,通常会将带权限的字段塞进header中。可是,在带权限的文档下载接口中,不管是用post,仍是get方式,咱们没法设置header头信息。苦恼呀?别急,接下来咱们慢慢拆解并分析步骤。前端

带权限的文档下载接口通常分为3个步骤:web

一、验证权限;后端

二、查找数据并生成文档或文档流;api

三、将文档写入response的流中并返回到客户端。ide

第一个步骤,咱们就不详谈了,可使用验证权限的中间件,例如identity4,去作权限验证的功能。post

关键在于第二和第三个步骤。加密

咱们能够将第二个步骤和第三个步骤在接口中分开,分为两个接口来完成一个文档的下载功能。url

 

第二个步骤的详细方法以下:中间件

一、前端使用post方式,将须要下载的参数传到后端,并将带权限的字段塞进header中;接口

二、后端收到消息后,首先判断权限,即当前用户是否有权限下载该文档或数据;

三、权限验证不经过,则返回错误到前端;

四、权限验证经过后,则查询数据并生成文档到磁盘中。若是是直接下载文档,则能够省略这一步;;

五、获取文档的文件名称和当前的时间等参数,经过一个密钥进行对称加密,并将加密后的字符串返回到前端。

解惑第二个步骤中的方法:

一、使用Post方式传输,并设置header头信息;

二、为什么须要将当前时间也一块儿加密呢?咱们能够经过该时间来判断url是否过时。过时时间能够自定义,通常设置为30秒到120秒之间。

三、被加密的文件名称能够是相对路径,也能够是一个不带路径的文件名称,这样能够隐藏文件的真实路径。当咱们须要在后端用到该文件时,才给其加上绝对路径。

 

第三个步骤的详细方法以下:

一、前端将第二个步骤的返回的加密字符串经过post或者get方式传到后端;

二、后端经过密钥解析后获得文件名和一个时间;

三、经过当前时间减去解密后获得的时间,判断当前加密串是否过时;

四、若是已过时,则返回错误信息到前端;

五、若是未过时,则加载文档流,并返回到前端。

 

经过以上方法,咱们在webapi中就实现了带权限的文档下载操做。

相关文章
相关标签/搜索