asp.net 表单验证方式

Asp.net的身份验证有有三种,分别是"Windows | Forms| Passport",其中又以Forms验证用的最多,也最灵活。

根据实际需求把用户分成不同的身份,就是角色,或者说是用户组,验证过程不但要验证这个用户本身的身份,还要验证它是属于哪个角色的。而访问授权是根据角色来设置的,某些角色可以访问哪些资源,不可以访问哪些资源等等。

Forms身份验证基本原理:

  1. <authentication mode="forms"> //本应用程序采用Forms验证方式
  2.     <forms name=".ASPXAUTH " slidingExpiration="true" loginUrl="/login.aspx" timeout="30" path= "/" domain=".abc.com">
  3.     </forms> 
  4. </authentication>

代码解读:

1.<forms>标签中的name表示指定要用于身份验证的 HTTP Cookie。默认情况下,name 的值是 .ASPXAUTH。采用此种方式验证用户后,以此用户的信息建立一个FormsAuthenticationTicket类型的身份验证票,再加密序列化为一个字符串,最后将这个字符串写到客户端的name指定名字的Cookie中.一旦这个Cookie写到客户端后,此用户再次访问这个web应用时会将连同Cookie一起发送到服务端,服务端将会知道此用户是已经验证过的。

2.FormsAuthenticationTicket类(身份验证票)包含的信息:

  CookiePath: 返回发出 Cookie 的路径

  Expiration: 获取 Cookie 过期的日期/时间

  IsPersistent: 如果已发出持久的 Cookie,则返回 true。否则,身份验证 Cookie 将限制在浏览器生命周期范围内

  IssueDate: 获取最初发出 Cookie 的日期/时间

  Name: 获取与身份验证 Cookie 关联的用户名

  UserData :获取存储在 Cookie 中的应用程序定义字符串

  Version: 返回字节版本号供将来使用

3.<forms>标签中的loginUrl指定如果没有找到任何有效的身份验证 Cookie,为登录将请求重定向到的URL。默认值为 default.aspx。一般此页面提供用户输入用户名和密码,用户提交后由程序来根据自己的需要来验证用户的合法性(大多情况是将用户输入信息同数据库中的用户表进行比较),如果验证用户有效,则生成同此用户对应的身份验证票,写到客户端的Cookie,最后将浏览器重定向到用户初试请求的页面.一般是用FormsAuthentication.RedirectFromLoginPage 方法来完成生成身份验证票,写回客户端,浏览器重定向等一系列的动作。
  

  1. public static void RedirectFromLoginPage( string userName, bool createPersistentCookie, string strCookiePath );

  userName: 就是此用户的标示,用来标志此用户的唯一标示,不一定要映射到用户账户名称

  createPersistentCookie: 标示是否发出持久的 Cookie.若不是持久Cookie,Cookie的有效期Expiration属性有当前时间加上web.config中timeout的时间,每次请求页面时,在验证身份过程中,会判断是否过了有效期的一半,要是的话更新一次cookie的有效期;若是持久cookie,Expiration属性无意义,这时身份验证票的有效期有cookie的Expires决定,RedirectFromLoginPage方法给Expires属性设定的是50年有效期。

  strCookiePath: 标示将生成的Cookie的写到客户端的路径,身份验证票中保存这个路径是在刷新身份验证票Cookie时使用(这也是生成Cookie的Path),若没有strCookiePath 参数,则使用web.config中 path属性的设置。

  身份验证票的属性有七个 .不足的四个参数是这么来的

  IssueDate: Cookie发出时间由当前时间得出,

  Expiration:过期时间由当前时间和下面要说的<forms>标签中timeout参数算出。此参数对非持久性cookie有意义。

  UserData: 这个属性可以用应用程序写入一些用户定义的数据,此方法没有用到这个属性,只是简单的将此属性置为空字符串,请注意此属性,在后面我们将要使用到这个属性。

  Version: 版本号由系统自动提供.

RedirectFromLoginPage 方法生成生成身份验证票后,会调用FormsAuthentication.Encrypt 方法,将身份验证票加密为字符串,这个字符串将会是以.ASPXAUTH为名字的一个Cookie的值。这个Cookie的其它属性的生成:Domain,Path属性为确省值,Expires视createPersistentCookie参数而定,若是持久 cookie,Expires设为50年以后过期;若是非持久cookie,Expires属性不设置。

生成身份验证Cookie后,将此Cookie加入到Response.Cookies中,等待发送到客户端。

最后RedirectFromLoginPage方法调用FormsAuthentication.GetRedirectUrl 方法获取到用户原先请求的页面,重定向到这个页面。

4.<forms>标签中的timeout和path,是提供了身份验证票写入到Cookie过期时间和默认路径

访问授权

Forms授权是基于目录的,可以针对某个目录来设置访问权限,比如,这些用户可以访问这个目录,那些用户不能访问这个目录。

授权设置是在你要控制的那个目录下的web.config文件中来设置

  1. <authorization>
  2.     <allow users="comma-separated list of users"
  3.         roles="comma-separated list of roles"
  4.         verbs="comma-separated list of verbs" />
  5.      <deny users="comma-separated list of users"
  6.         roles="comma-separated list of roles"
  7.         verbs="comma-separated list of verbs" />
  8. </authorization>

<allow>标签表示允许访问,其中的属性

  1. users:一个逗号分隔的用户名列表,这些用户名已被授予对资源的访问权限。问号 (?) 允许匿名用户;星号 (*) 允许所有用户

  2. roles:一个逗号分隔的角色列表,这些角色已被授予对资源的访问权限。

  3. verbs:一个逗号分隔的 HTTP 传输方法列表,这些 HTTP 传输方法已被授予对资源的访问权限。注册到 ASP.NET 的谓词为GET、HEAD、POST 和 DEBUG。

  <deny>标签表示不允许访问。其中的属性同上面的。

剩余内容详见asp.net 表单验证方式


解决方式一

修改页面LogOn.cshtml。

问题分析:

表单中,包含用户名/密码语言类型。开始,只有一个初始化;之后在其后面再加一个密码加密(此时等于有两个密码,一个加密一个没有)

把表单拆开,删除未加密密码。即把初始化改成序列化。

  1. var str = "UserName=" + $("#txtUserName").val();
  2. str += "&Password=" + EncodePwd("txtPassword");
  3. str += "&Lang=" + $("#selLang").val();
  4. var strKeyCode = typeof $("#txtKeyCode").val() == "undefined" ? "" : $("#txtKeyCode").val();
  5. str += "&KeyCode=" + strKeyCode;
  6. $.ajax({
  7. type: "POST",
  8. url: '@{ <text>@Url.Action("UserLogOn", "Account")</text>}',
  9. cache: false,
  10. data: str,
  11. async: false,
  12. dataType: 'json',
  13.  
  14. });
  15. function EncodePwd(ctrlId) {
  16. var pwd = window.document.getElementById(ctrlId).value;
  17. var str = b64_sha1(pwd);
  18. return str;
  19. }

解决方式二:

禁用未加密端口 80并启用端口 443

Web服务器使用基于纯文本表单的身份验证——.net(未完待续)的更多相关文章

  1. 【FBA】SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用

    //http://www.cnblogs.com/OceanEyes/p/custom-provider-in-sharepoint-2013-fba-authentication.html 由于项目 ...

  2. [FBA]SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用

    //http://tech.ddvip.com/2014-05/1401197453210723.html 由于项目的需要,登录SharePoint Application的用户将从一个统一平台中获取 ...

  3. SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用

    由于项目的需要,登录SharePoint Application的用户将从一个统一平台中获取,而不是从Domain中获取,所以需要对SharePoint Application的身份验证(Claims ...

  4. obj-c编程15[Cocoa实例04]:基于Core Data的多文档程序示例[未完待续]

    上一个例子我们使用的模式数据实际上是基于一个Person数组,现在我们看一下如何使用Cocoa中的Core Data框架支持,几乎不用写一行代码,完成模式数据的建立. 我们这里模式的元素使用的是Car ...

  5. 基于表单的身份验证(FBA)

    https://technet.microsoft.com/zh-cn/library/ee806890(office.15).aspx http://www.tuicool.com/articles ...

  6. ASP.NET MVC 4 (十三) 基于表单的身份验证

    在前面的章节中我们知道可以在MVC应用程序中使用[Authorize]特性来限制用户对某些网址(控制器/控制器方法)的访问,但这都是在对用户认证之后,而用户的认证则依然是使用ASP.NET平台的认证机 ...

  7. asp.net 如何配置authentication,完成基于表单的身份验证

    步骤一: 在根目录下的web.config中加入: <system.web> <authentication mode="Forms">           ...

  8. JavaWeb应用中的身份验证(声明式)——基于表单的身份认证

    容器管理安全最普遍的类型建立在基于表单的身份验证方式上. 通过这样的方式,server自己主动将尚未验证的用户重定向到一个HTML表单.检查他们的username和password,决定他们属于哪个角 ...

  9. 在Tomcat中采用基于表单的安全验证

    .概述   (1)基于表单的验证 基于From的安全认证可以通过TomcatServer对Form表单中所提供的数据进行验证,基于表单的验证使系统开发者可以自定义用户的登陆页面和报错页面.这种验证方法 ...

随机推荐

  1. 51nod-1181-两次筛法

    1181 质数中的质数(质数筛法)  题目来源: Sgu 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 如果一个质数,在质数列表中的编号也是质数,那么就 ...

  2. 使用IntelliJ IDEA 配置Maven(转)

    原文地址:使用IntelliJ IDEA 配置Maven 1. 下载Maven 官方地址:http://maven.apache.org/download.cgi 解压并新建一个本地仓库文件夹 2.配 ...

  3. MapReduce(三)

    MapReduce(三) MapReduce(三): 1.关于倒叙排序前10名 1)TreeMap根据key排序 2)TreeSet排序,传入一个对象,排序按照类中的compareTo方法排序 2.写 ...

  4. PL/SQL Developer安装教程

    1.下载:http://pan.baidu.com/s/1qYtvy1I密码:451g instantclient官方下载链接:http://www.oracle.com/technetwork/to ...

  5. Linux服务列表(CentOS)

    1.service用法 service SCRIPT COMMAND [OPTIONS] #执行脚本中方法,最常用法 service --status-all #查看所有服务的运行状态 service ...

  6. PHP -S命令 PHP内置web服务器

    手册详细介绍 : http://www.php.net/manual/zh/features.commandline.webserver.php 适合本地开发  php 5.4.0起 这个内置的Web ...

  7. vue cli搭建的vue项目 不小心开了eslint 一直报黄色的警告

    报错必须处理,警告也忍不了,发现在bulid -webpack.base.config.js 里找到 const createLintingRule = () => ({ /*test: /\. ...

  8. mac navicate破解版汉化

    https://pan.baidu.com/s/1dRoalG8lZ-AMGmZrj8OhpQ 提取密码:e8ad 安装完navicate之后解压zh-Hans.zip 点击Resources文件夹 ...

  9. vue.set动态新增对象属性,触发dom渲染

    当我们给一个props或者data中被观测的对象添加一个新的属性的时候,不能直接添加,必须使用Vue.set方法 /** * ==== 选择产品 ==== * 因为vue实现双向数据绑定的机制是数据劫 ...

  10. VSTO:使用C#开发Excel、Word【7】

                            第2章Office解决方案介绍 Office解决方案的三种基本模式现在,您了解Office对象模型的基本模式,本章将介绍开发人员如何模拟和构建其Offi ...