• ASP.NET 身份验证机制


    ASP.NET提供了3种认证方式:windows身份验证、Forms验证和Passport验证。
    windows身份验证: IIS根据应用程序的设置执行身份验证。要使用这种验证方式,在IIS中必须禁用匿名访问。
    Forms验证:用Cookie来保存用户凭证,并将 未经身份验证的用户重定向到自定义的登录页。
    Passport验证:通过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登录和核心配置文件服务。

    关于这三种验证方式的配置,推荐一篇博文:http://www.cnblogs.com/chenqingwei/archive/2010/07/12/1775472.html

     

    我这里详解Forms验证方式,在ASP.NET项目中的实际应用与深度理解。

    对于ASP.NET验证机制在项目开发中运用,会使项目非常方便快捷的实现页面的访问权限问题,而且省去了一些没必要的安全问题。

    对于ASP.NET提供的验证机制,要深度的理解后才能灵活的运用。对于整个项目的访问权限,有时候我们需要对部分页面的访问权限进行限制,又不影响其他公共页面的访问。举个实际项目的例子。

    案例:有一个ASP.NET的项目,对整个项目访问限制,不允许匿名用户访问,登录页面除外。

      问题是,登录页面(假设是:Manager目录下的Login.aspx文件)中应用了Script的一个文件(假设这个文件是:Script/jquery-1.7.1.min.js),同时,登录页面用到了Code目录下面的ValidateCode.ashx文件来生成验证码的图片。要求整个网站只有当用户登录之后才能访问。

     

    思路:首先,我们限制整个根目录站点不允许匿名用户访问,否则将跳转到登录页面。其次,登录页面用到了jQuery开发的js特效,引用了Script文件夹下面的jquery-1.7.1.min.js文件,我们让匿名用能访问这个文件。最后,登录页面用到了Code目录下的ValidateCode.ashx文件来生成验证码图片,所以能让匿名用户访问这个文件。

     

    1.web.config配置文件

    a.配置程序不允许匿名用户访问网站,否则跳转到登录页面。path='/'表示根目录即限制整个站点不允许匿名用户,也可以只限制某一个文件夹下面的页面不允许匿用户访问。<deny users="?"> 限制匿名用户,"?"表示匿名用户,“*”表示所有用户。

    复制代码
    <!--配置Forms身份认证 不允许匿名用户访问,否则跳转到/Manager/login.aspx 页面 --> <authentication mode="Forms"> <formsname="myTeacher" loginUrl="~/Manager/login.aspx" protection="All" path="/" timeout="60"></forms> </authentication><authorization> <deny users="?"/> </authorization>
    复制代码

    b.当用户打开程序时,会自动转到Manager/login.aspx页面,但是这个页面引用的jquery-1.7.1.min.js文件是不可用的。因为,限制了所有的匿名用户只能访问Login.aspx页面,只有当注册票据之后其它的页面或文件才能正常访问。所以当匿名用户需要有权限访问jquery-1.7.1.min.js文件,就需要设置某个文件或者文件的访问权限为所有用户。

    复制代码
    <!--允许所有用户访问Script文件夹--> <location path="Script"> <system.web> <authorization> <allow users="*" /></authorization> </system.web> </location>
    复制代码

    c.所以,根据上面可知,验证码图片是不能显示的。我们把生成验证码文件,配置为允许匿名用户访问,如下代码:

    复制代码
    <!--允许所有用户访问Code/ValidateCode.ashx文件,这个是用来生成验证码图片--> <location path="Code/ValidateCode.ashx"><system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>
    复制代码

    这里用到的完整代码如下:

    复制代码
    <!--允许所有用户访问Script文件夹--> <location path="Script"> <system.web> <authorization> <allow users="*" /></authorization> </system.web> </location> <!--允许所有用户访问Code/ValidateCode.ashx文件,这个是用来生成验证码图片--><location path="Code/ValidateCode.ashx"> <system.web> <authorization> <allow users="*" /> </authorization></system.web> </location> <system.web> <customErrors mode="On" defaultRedirect="../error.aspx"/> <!--配置Forms身份认证 不允许匿名用户访问,否则跳转到/Manager/login.aspx 页面 --> <authentication mode="Forms"> <forms name="myTeacher"loginUrl="~/Manager/login.aspx" protection="All" path="/" timeout="60"></forms> </authentication> <authorization><deny users="?"/> </authorization>
    复制代码

    说明:这里的思路是先禁止所有的匿名用户访问整个站点,然后在释放某个文件夹或文件允许匿名用户访问,从而达到我们的需求。

       所以,我们也可以用不同的思路来进行限制,比如:整个站点配置为允许任何人访问,在配置具体的文件夹和文件不允许匿名用户方面,从而达到我们的需求。其他的场景大同小异,总之,怎样简单便怎么使用!

    2.登录注册票据

       

      当通过登录页面登录提交并登录成功后,注册票据。这时,注册票据之后,相当于当前用户的身份已经不是匿名用户,没有了访问权限的限制。FormsAuthentication的命名空间是:System.Web.Security; 

    1 FormsAuthentication.RedirectFromLoginPage(UserID, false); //页面注册 关键 UsersID表示登录ID

    3.撕毁票据(退出系统)

    1 FormsAuthentication.SignOut(); //撕毁票据 退出登录
  • 相关阅读:
    第三章:Hadoop简介及配置Hadoop-1.2.1,hbase-0.94.13集群
    maven环境的搭建,lemon-OA办公系统的搭建
    如何打开mo文件并修改 PoEdit
    安装Elastix-2.4版本
    RabbitMQ安装
    Yum编译安装Error Downloading Packages报错
    linux:ping不通www.baidu.com
    tar命令解压缩出错
    PV、UV
    使用存储过程创建数据
  • 原文地址:https://www.cnblogs.com/findchance/p/2670242.html
Copyright © 2020-2023  润新知