前言

认证功能能让Web页面只被有权限的人访问。而认证机制究竟是怎样一个原理呢?通过今天的学习能对这个有个大致的了解。

正文

什么是认证

计算机无法判断对方的身份,需要客户端自报家门。

服务端为确认客户端是否真的具有访问系统的权限,需要核对

“登录者本人才知道的信息”、“登录者本人才会有的信息”

HTTP使用的认证方式

HTTP/1.1使用的认证方式如下所示。

  • BASIC认证(基本认证)

  • DIGEST认证(摘要认证)

  • SSL客户端认证

  • FormBase认证(基于表单认证)

Basic认证

Web服务器与通信客户端之间进行的认证方式。

Basic认证的认证步骤

  1. 客户端请求的资源需要BASIC认证,服务器随401状态码(需要认证),返回带WWW-Authenticate首部字段的响应。
  2. 接收到401状态码的客户端为了通过BASIC认证,需要将用户ID和密码发送到服务器(冒号连接,再经过Base64编码处理)。
  3. 接收到包含首部字段Authorization请求的服务器,会对信息的正确性进行验证。(若通过,则返回一个包含Request-URI资源的响应)

PS:Basic认证所采用的Base64编码并不是加密处理。

DIGEST认证

采用和Basic认证一样的质询/响应(challenge/response)的方式。

Digest认证的认证步骤:

  1. 客户端请求需认证的资源时,服务器会随401状态码返回带WWW-Authenticate首部字段的响应,该字段包含质问响应方式认证所需的临时质询码(随机数,nonce)。
  2. 客户端接收到401状态码,返回的响应中包含DIgest认证必须得首部字段Authenticate信息。(Authenticate中包含username,realm,nonce,uri和response的字段信息,realm和nonce是从服务器接收到的响应中的字段)
  3. 服务器接收到包含首部字段Authorization请求的服务器,确认认证信息的正确性。通过后返回包含Request-URI资源的响应。

SSL客户端认证

借由HTTPS的客户端证书完成认证的方式。
凭借客户端证书认证,服务器可确认访问是否来自已登录的客户端

SSL客户端认证的步骤:
需事先将客户端证书分发给客户端,且客户端必须安装此证书。

  1. 服务器接收到需要认证资源的请求时,服务器会发送Certificate Request报文,要求客户端提供客户端证书。
  2. 客户端将客户端证书信息以Client Certificate报文方式发送给服务器。
  3. 服务器验证客户端证书验证通过后才能领取证书内客户端的公开密钥,然后开始HTTPS加密通信。

SSL客户端认证采用双因素认证
证书认证(SSL客户端证书认证客户端计算机)+表单认证(密码用来确定是用户本人的行为)

基于表单认证

并不是HTTP协议中定义的。客户端向服务器上的Web应用程序发送登录信息(Credential),按登录信息的验证结果认证。

认证多半为基于表单认证
BASIC和DIGEST几乎不怎么使用(便利性和安全性考虑),SSL客户端认证未普及(导入和维持费用等问题)

Session管理和Cookie应用
HTTP是无状态协议,之前已认证成功的用户状态无法通过协议层面保存下来。即无法实现状态管理,我们使用Cookie来管理Session(会话),以弥补HTTP协议中不存在的状态管理功能。

步骤:

  1. 客户端把用户ID和密码等登录信息放入报文的实体部分,通常以POST请求的方式发送给服务器。
  2. 服务器会发放用以识别用户的Session ID。通过验证从客户端发送过来的登录信息进行身份认证,将用户的认证状态和Session ID绑定后记录在服务器端。
  3. 客户端接收到Session ID后,会将其作为Cookie保存在本地。下次向服务器发送请求时,浏览器自动发送Cookie,Session ID会随之发送到服务器。服务端通过验证接收到的Session ID识别用户和其认证状态。

图解HTTP学习笔记——确认访问用户身份的认证的更多相关文章

  1. 确保web安全的https、确认访问用户身份的认证(第七章、第八章)

    第七章 确保web安全的https 1.http的缺点: (1)通信使用明文,内容可能会被窃听 (2)不验证通信方的身份,因此有可能遭遇伪装 (3)无法证明报文的完整性,因此有可能已遭篡改. 2.通信 ...

  2. 读《图解HTTP》有感-(确认访问用户身份的认证)

    写在前面 认证机制能够保证特定的资源给特定的(经过认证的)用户访问.从而保证了资源的机密性. 正文 1.为什么要认证?认证的媒介是什么? 认证的目的在于确认访问者的身份,保证资源的私有性(只有经过特定 ...

  3. 图解HTTP总结(8)——确认访问用户身份的认证

    Session 管理及 Cookie 应用 基于表单认证的标准规范尚未有定论,一般会使用Cookie来管理Session(会话). 基于表单认证本身是通过服务器端的Web应用,将客户端发送过来的用户I ...

  4. openresty 学习笔记五:访问RabbitMQ消息队列

    openresty 学习笔记五:访问RabbitMQ消息队列 之前通过比较选择,决定采用RabbitMQ这种消息队列来做中间件,目的舒缓是为了让整个架构的瓶颈环节.这里是做具体实施,用lua访问Rab ...

  5. 图解HTTP学习笔记——简单的HTTP协议

    简单的HTTP协议 前言 最近在学习Web开发的相关知识,发现<图解HTTP>这本书通俗易懂.所以花时间学习这本书,并记录下学习笔记. 如上图,我们每天都在浏览网页,一般我们都是在浏览器地 ...

  6. Shiro学习笔记总结,附加" 身份认证 "源码案例(一)

    Shiro学习笔记总结 内容介绍: 一.Shiro介绍 二.subject认证主体 三.身份认证流程 四.Realm & JDBC reaml介绍 五.Shiro.ini配置介绍 六.源码案例 ...

  7. Bash脚本编程学习笔记05:用户交互与脚本调试

    用户交互 在<学习笔记04>中我们有提到位置参数,位置参数是用来向脚本传递参数的一种方式.还有一种方式,是read命令. [root@c7-server ~]# read name alo ...

  8. Linux学习笔记06—系统用户及用户组的管理

    一.认识/etc/passwd和/etc/shadow 1./etc/passwd 由 ‘:’ 分割成7个字段,每个字段的具体含义是: 用户名 存放账号的口令:现在存放在/etc/shadow下,在这 ...

  9. 图解HTTP学习笔记

    前言: 一直觉得自己在HTTP基础方面都是处于知其然,不知其所以然的样子.最近利用空闲时间拜读了一下图解HTTP,写篇博客记录一下读书笔记. TCP三次握手: ① 发送端首先发送一个带SYN标志的数据 ...

随机推荐

  1. Android 收集已发布程序的崩溃信息

    我们写程序的时候都希望能写出一个没有任何Bug的程序,期望在任何情况下都不会发生程序崩溃.不过理想是丰满的,现实是骨感的.没有一个程序员能保证自己写的程序绝对不会出现异常崩溃.特别是针对用户数达到几十 ...

  2. OpenFileDialog对话框Filter属性

    OpenFileDialog对话框的Filter属性说明: 首先说明一个示例,分析一下Filter属性的构成:“ Excel文件|*.xls ”,前面的“Excel文件”成为标签,是一个可读的字符串, ...

  3. Swift is Open Source 博客note

    Swift is Open Sourcehtml, body {overflow-x: initial !important;}html { font-size: 14px; } body { mar ...

  4. 【微信小程序】数据与界面UI不同步,不能直接操作Page.data

    问题:数据层与UI不同步 微信小程序也采用UI绑定数据源的形式,根据以前做WPF的经验,直觉上认为修改了数据层(Page.data)后,UI会自动更新,然而实验发现数据层修改后UI层未修改,导致数据层 ...

  5. 未能加载文件或程序集“System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。系统找不到指定的文件。

    问题:WPF未能加载文件或程序集"System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ...

  6. Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现

    Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现 2015-03-10 22:38 28419人阅读 评论(17) 收藏 举报  分类: Android ...

  7. Extjs4.2 TreeView TreeStore 移除节点不触发delete(remove node don't trigger delete method)

    当我们操作treeview的时候,新增节点,如果成功则新增node,如果失败的话我们不想node还显示出来,可以通过监听sync的failure事件,失败时候移除node,但是第一次肯定达到了预期效果 ...

  8. Spark硬件配置推荐

    1.存储系统 如果可以的话,把Spark的hadoop的节点安装在一起,最容易的方式是用standalone的模式安装,用mapred.child.java.opts设置每个任务的内存,用mapred ...

  9. java操作大文件复制

    https://www.cnblogs.com/coprince/p/6594348.html https://blog.csdn.net/w592376568/article/details/796 ...

  10. linux 木马清理过程

    服务器出现异常,完全无法访问,ssh登陆都极其缓慢 解决过程 top 查看系统状态,发现 load average 平均负载值非常高,再看排名第一的进程,是一个不认识的进程名:minerd 感觉是被入 ...