Asp.Net二级域名共享Forms身份验证、下载站/图片站的授权访问控制
更新时间:2021年9月22日 10:18 点击:1675
一般大家对小文件的解决办法是直接在服务端读取文件,然后输出,这样就避免了文件地址的暴露,这是一种解决办法。而我现在想说的是使用 TransmitFile 方法直接输出文件,但是这个方法对大文件的支撑力度有多少,以及会带来多大的性能开销,我还没有测试过,有兴趣的朋友可以测试下,并发表评论。
好了,进入正题,一般对下载站,大家想到的就是流量的问题,所以自动就想到应该把文件与程序代码分开部署。所以我给文件单独做了一个二级域名,我们就叫 file.xxx.com 吧。主网站域名就是 www.xxx.com了,或者其他二级域名都行。
那第一步就是先要实现这2个站点之间的身份验证共享了,比如登陆了主站后自动分站就实现登录了,那.Net的Forms身份验证很容易的就能实现这个功能,底层思路其实就是共享Cookie的原理。第二部就是给文件站做权限过滤。下面我们给主站以及文件站同时添加web.config。给他们加入相同的配置,Web.config主要配置代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<connectionStrings>
</connectionStrings>
<appSettings>
</appSettings>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Home/LogOn" defaultUrl="/" timeout="600" slidingExpiration="true" name="File" path="/" enableCrossAppRedirects="true"></forms>
</authentication> <httpCookies domain=".xxx.com"/>
<machineKey validationKey="AAA977D304FB289C182E00C710A099C9F92986DC25AD69F8" decryptionKey="AAA2B3F76A9359431E717CA8275EE72EEEDC70ED55152010" validation="SHA1"/>
</system.web>
<!--此节点只需加到文件站下--> <system.webServer>
<handlers>
<add name="*.*" path="*.*" verb="*" type="Web.Handler.Download" />
</handlers>
</system.webServer>
</configuration>
以上配置文件针对跨域访问的几个关键配置点:一:authentication的name要相同,path="/" 表示cookie存储路径为根域名,enableCrossAppRedirects="true" 表示身份验证是否可以重定向到其他应用程序。二:httpCookie节点配置为顶级域名。三:两个站点的machinekey必须相同。 那针对权限控制,通过实现.Net里面的访问过滤器,也就是IHttpHandler接口,用来拦截访问。实现方法也很简单,只要实现ProcessRequest方法就可以了,下面是我的代码:
namespace Web.Handler
{
/// <summary>
/// 文件下载登陆验证
/// </summary>
public class Download : IHttpHandler
{
public bool IsReusable
{
get
{
return true;
}
}
public void ProcessRequest(HttpContext context)
{
if (context.User.Identity.IsAuthenticated)
{
string fileName = context.Server.MapPath(context.Request.FilePath);
context.Response.ContentType = Path.GetExtension(fileName);
context.Response.TransmitFile(context.Request.FilePath);
}
else
{
context.Response.Write("您未登录!");
}
}
}
}
写完以上代码后,那就是增加过滤配置了,注意上面的配置文件注释,最主要的配置节:<add name="*.*" path="*.*" verb="*" type="Web.Handler.Download" /> name是筛选器的名称,随便填,path表示你要过滤的文件后缀,我是所有文件都需要过滤,所以直接用*.*,如果单纯只过滤jpg跟gif,可以改为:*.jpg,*.gif 即可,type表示过滤器Dll地址,也就是我们实现IHttpHandler的类全名,ok,文件访问控制就已经完成了。 注意:由于我使用的是IIS7,所以此处的Handler添加到了system.webSever节点下,IIS6及以下版本直接添加到system.web节点下就可以了。
好了,进入正题,一般对下载站,大家想到的就是流量的问题,所以自动就想到应该把文件与程序代码分开部署。所以我给文件单独做了一个二级域名,我们就叫 file.xxx.com 吧。主网站域名就是 www.xxx.com了,或者其他二级域名都行。
那第一步就是先要实现这2个站点之间的身份验证共享了,比如登陆了主站后自动分站就实现登录了,那.Net的Forms身份验证很容易的就能实现这个功能,底层思路其实就是共享Cookie的原理。第二部就是给文件站做权限过滤。下面我们给主站以及文件站同时添加web.config。给他们加入相同的配置,Web.config主要配置代码如下:
复制代码 代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<connectionStrings>
</connectionStrings>
<appSettings>
</appSettings>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Home/LogOn" defaultUrl="/" timeout="600" slidingExpiration="true" name="File" path="/" enableCrossAppRedirects="true"></forms>
</authentication> <httpCookies domain=".xxx.com"/>
<machineKey validationKey="AAA977D304FB289C182E00C710A099C9F92986DC25AD69F8" decryptionKey="AAA2B3F76A9359431E717CA8275EE72EEEDC70ED55152010" validation="SHA1"/>
</system.web>
<!--此节点只需加到文件站下--> <system.webServer>
<handlers>
<add name="*.*" path="*.*" verb="*" type="Web.Handler.Download" />
</handlers>
</system.webServer>
</configuration>
以上配置文件针对跨域访问的几个关键配置点:一:authentication的name要相同,path="/" 表示cookie存储路径为根域名,enableCrossAppRedirects="true" 表示身份验证是否可以重定向到其他应用程序。二:httpCookie节点配置为顶级域名。三:两个站点的machinekey必须相同。 那针对权限控制,通过实现.Net里面的访问过滤器,也就是IHttpHandler接口,用来拦截访问。实现方法也很简单,只要实现ProcessRequest方法就可以了,下面是我的代码:
复制代码 代码如下:
namespace Web.Handler
{
/// <summary>
/// 文件下载登陆验证
/// </summary>
public class Download : IHttpHandler
{
public bool IsReusable
{
get
{
return true;
}
}
public void ProcessRequest(HttpContext context)
{
if (context.User.Identity.IsAuthenticated)
{
string fileName = context.Server.MapPath(context.Request.FilePath);
context.Response.ContentType = Path.GetExtension(fileName);
context.Response.TransmitFile(context.Request.FilePath);
}
else
{
context.Response.Write("您未登录!");
}
}
}
}
写完以上代码后,那就是增加过滤配置了,注意上面的配置文件注释,最主要的配置节:<add name="*.*" path="*.*" verb="*" type="Web.Handler.Download" /> name是筛选器的名称,随便填,path表示你要过滤的文件后缀,我是所有文件都需要过滤,所以直接用*.*,如果单纯只过滤jpg跟gif,可以改为:*.jpg,*.gif 即可,type表示过滤器Dll地址,也就是我们实现IHttpHandler的类全名,ok,文件访问控制就已经完成了。 注意:由于我使用的是IIS7,所以此处的Handler添加到了system.webSever节点下,IIS6及以下版本直接添加到system.web节点下就可以了。
相关文章
Nodejs中session的简单使用及通过session实现身份验证的方法
session的本质使用cookie来实现。本文给大家介绍Nodejs中session的简单使用及通过session实现身份验证的方法,对node.js session相关知识感兴趣的朋友一起学习吧...2016-02-09详解ASP.NET Core和ASP.NET Framework共享身份验证
本篇文章主要介绍了详解ASP.NET Core和ASP.NET Framework共享身份验证 ,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2021-09-22- 这篇文章主要介绍了浅谈如何在ASP.NET Core中实现一个基础的身份认证,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。...2021-09-22
C#窗体编程(windows forms)禁止窗口最大化的方法
这篇文章主要介绍了C#窗体编程(windows forms)禁止窗口最大化的方法,以及避免弹出系统菜单和禁止窗口拖拽的方法,需要的朋友可以参考下...2020-06-25- 这篇文章主要介绍了Django中的JWT身份验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-08
- 这篇文章主要为大家详细介绍了Asp.net mvc验证用户登录之Forms实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
- 这篇文章主要介绍了ASP.NET窗体身份验证,感兴趣的小伙伴可以参考一下...2021-09-22
- 今天小编就为大家分享一篇pytorch中的transforms模块实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-02
- IIS的各种身份验证详细测试 ...2016-01-27
- asp.net程序中,用户可以根据角色访问对应页面以及功能。本文将对此进行介绍,具有很好的参考价值,下面跟着小编一起来看下吧...2021-09-22
- crypt() 函数返回使用 DES、Blowfish 或 MD5 加密的字符串。 在不同的操作系统上,本函数的行为不同,某些操作系统支持一种以上的算法类型。在安装时,PHP 会检查什么算法...2016-11-25
- 这篇文章主要介绍了最简单的asp.net中的窗体身份验证,详细叙述了asp.net的窗体身份验证步骤,感兴趣的小伙伴们可以参考一下...2021-09-22
- 这篇文章主要介绍了WPF中引入WindowsForms控件的方法,结合实例形式分析了在WPF中调用Windows Forms控件的具体步骤与相关实现技巧,需要的朋友可以参考下...2020-06-25
- 我们来看看html代码 <form action=111cnNet.php > <input type=text name=username> <input type=text name=password> <input type=submit name=password value='提交...2016-11-25
ASP.NET实现基于Forms认证的WebService应用实例
这篇文章主要介绍了ASP.NET实现基于Forms认证的WebService应用,实例分析了使用Forms进行WebService身份认证的相关技巧与实现方法,需要的朋友可以参考下...2021-09-22- 本篇文章小编就为大家介绍一下在asp.net中几种常用的身份验证方法。需要的朋友可以过来参考下,希望对大家有所帮助...2021-09-22
- 这篇文章主要为大家详细介绍了php面向对象的用户登录身份验证,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-06-11
- 这篇文章主要为大家详细介绍了.net MVC中使用forms验证的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
Asp.Net二级域名共享Forms身份验证、下载站/图片站的授权访问控制
我们平时一般在做图片或者文件下载权限控制的时候基本都是控制到下载页面的,当你的下载地址暴露后,浏览者就直接可以通过文件地址进行下载了,这时候也就出现了我们常说的盗链...2021-09-22- 在nancy中,身份验证分为basic ,form ,token,stateless几种,basic和form这里不说了,本文重点介绍token验证,需要的朋友一起看看吧...2020-06-25