前言

认证功能能让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. [转]oracle在删除表\表空间\用户时,如何释放磁盘空间

    一.drop表 执行drop table xx 语句 drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉.这样,回收站里的表信息就可以被恢复,或彻底清除. 通过查询回收站 ...

  2. [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)

    原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...

  3. [转] javaweb学习-jstl-<c:forEach>中 varStatus的属性简介

    原文地址:http://blog.csdn.net/u010648555/article/details/51093277 varStatus是<c:forEach>jstl循环标签的一个 ...

  4. Html模板渲染引擎Hogan

    Github:https://github.com/twitter/hogan.js 最简单的使用教程:http://www.imooc.com/article/18493

  5. InstallShield脚本事件

    脚本事件主要有三大类:Before Move Data(安装数据前).Move Data(安装数据过程中).After Move Data(安装数据后). OnBegin:在初始化后,被调用 OnFi ...

  6. js读取本地txt文件中的json数据

    list.txt内容 [ {"optionKey":"1", "optionValue":"Canon in D"}, ...

  7. SpringBoot2 @validated 类型效验

    详细参见:<Spring Boot 2精髓:从构建小系统到架构分布式大系统> 第三章 3.5节 验证框架 package com.archibladwitwicke.springboot2 ...

  8. Graph-DFS-图的深度优先遍历

    #include <iostream> using namespace std; /* 5 5 1 2 1 3 1 5 2 4 3 5 1 2 4 3 5 ---------------- ...

  9. 微信小程序滚动Tab实现左右可滑动切换

    --------------------------------------------------------wxml---------------------------------------- ...

  10. 微信小程序——星星评分

    先来个效果图镇楼: 实现原理: 1.循环需要评分的列表,判断它的分数 与 当前星星索引的大小: 2.点击,获取星星对应的分数,让星星高亮. 代码: star.wxml: <view class= ...