HTTP中的认证机制

什么是认证机制?:

服务器需要知道客户端是谁。

怎样知道客户端身份?:

核对“登录者本人才知道的信息”

  密码:只有本人才会知道的字符串信息

  动态令牌:仅限本人持有的设备内显示的一次性密码

  数字证书:仅限本人(终端)持有的信息

  生物证书:指纹和虹膜等本人的生理信息

  IC卡等:仅限本人持有的信息

HTTP/1.1使用的认证方式有哪些?:

BASIC认证(基本认证)

DIGEST认证(摘要认证)

SSL客户端认证

FormBase认证(基于表单认证)

此外,还有Windows统一认证(Keberos认证,NTLM认证)

BASIC认证步骤:

1.当请求的资源需要BASIC认证时,服务器会随状态码401 Authorization Required,返回带WWW-Authenticate首部字段的响应。该字段内包含认证的方式(BASIC)及Request-URI安全域字符串

2.接受到状态码401的客户端为了通过BASIC认证,需要将用户ID及密码发送给服务器。发送的字符串内容是由用户ID和密码构成,两者中间以冒号连接后,再经过Base64编码处理。当用户代理为浏览器时,用户仅需输入用户ID和密码即可,之后,浏览器会自动完成到Base64编码的转换工作

3.接收到包含首部字段Authorization请求的服务器,会对认证信息的正确性进行验证。如验证通过,则返回一条包含Request-URI资源的响应。

BASIC认证缺点:

  1.虽然采用了Base64编码方式,但是并不是加密处理,信息仍有被窃听的危险

  2.除此之外想再进行一次BASIC认证时,一般的浏览器却无法实现认证注销操作

BASIC不够灵活,不常用

DIGEST认证步骤:

1.请求需认证的资源时,服务器会随着状态码401 Authorization Required,返回带WWW-Authenticate首部字段的响应。该字段内包含质问响应方式认证所需的临时质询码(随机数,nonce)和realm字段信息

2.接受到401状态码的客户端,返回的响应中包含DIGEST认证必须的首部字段信息Authorization

信息。首部字段Authorization内必须包含username,realm,nonce,uri和response的字段信息。其中,realm和nonce就是之前从服务器接受到的响应中的字段

3.接受到包含首部字段Authorization请求的服务器,会确认认证信息的正确性。认证通过后则返回包含Request-URI资源的响应,并且这时会在首部字段Authorization-Info写入一些认证成功的相关信息

缺点:  

  使用上不便捷灵活,并且仍然达不到多数WEB网站对高度安全等级的追求标准。

SSL客户端认证步骤:

1.接收到需要认证资源的请求,服务器会发送Certificate Request报文,要求客户端提供客户端证书(需要时先将客户端证书分发给客户端,且客户端必须安装此证书)

2.用户选择将发送的客户端证书后,客户端会把客户端证书信息以Client Certificate报文方式发送给服务器

3.服务器验证客户端证书验证通过后方可领取证书内客户端的公开密钥,然后开始HTTPS加密通信

缺点:

  需要支付高额的费用

基于表单验证:

输入已事先登录的用户ID,和密码等登录信息后,发送给WEB应用程序,基于认证结果来决定认证是否成功

步骤:

1.客户端把用户ID和密码等登录信息放入报文的实体部分,通常是以POST方法把请求发送给服务器。而这时,会使用HTTPS通信来进行HTML表单画面的显示和用户输入数据的发送。

2.服务器会发放用以识别用户的Session ID。通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与Session ID绑定后记录在服务器端(在首部字段Set-Cookie内写入Session ID)

3.客户端接收到从服务器端发来的Session ID后,会将其作为Cookie保存在本地。下次向服务器发送请求时,浏览器会自动发送Cookie,所以Session ID也随之发送到服务器。服务器端可通过验证接收到的Session ID识别用户和其认证状态

注:密码加盐:一种服务器端保存用户密码加密方式,由服务器随机生成一个字符串,保证长度足够长,并且是真正随机生成的。然后把它和密码字符串相连接(前后都可以)生成散列值。当两个用户使用了用一个密码时,由于随机生成的salt值不同,对应的散列值也将是不同的。这样一来,很大程度上减少了密码特征,攻击者也就很难利用自己手中的密码特征库进行破解。

HTTP——学习笔记(7)的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. 判断浏览器是PC设备还是移动设备

    var browser={ versions:function(){ var u = navigator.userAgent, app = navigator.appVersion; return { ...

  2. HDU 3068 最长回文( Manacher模板题 )

    链接:传送门 思路:Manacher模板题,寻找串中的最长回文子串 /***************************************************************** ...

  3. Vue2+Webpack+ES6 兼容低版本浏览器(IE9)解决方案

    Vue2+Webpack+ES6 兼容低版本浏览器(IE9)解决方案 解决方式:安装 "babel-polyfill" 即可. 命令:npm install --save-dev ...

  4. Unity图集分割

    using System.IO;using UnityEngine;using UnityEditor; public class TestSaveSprite{ [MenuItem("LL ...

  5. js-DOM操作基本知识

  6. 【codeforces 733E】Sleep in Class

    [题目链接]:http://codeforces.com/problemset/problem/733/E [题意] 有n级台阶,每个台阶上都有一个tag; 标记着向上或向下; 你到了某级台阶,就要按 ...

  7. LaTeX 插图片

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50240371 这里列出3种LaTeX中 ...

  8. Java分布式爬虫Nutch教程——导入Nutch工程,执行完整爬取

    Java分布式爬虫Nutch教程--导入Nutch工程,执行完整爬取 by briefcopy · Published 2016年4月25日 · Updated 2016年12月11日 在使用本教程之 ...

  9. ASP.NET-Session与复杂数据类型

    原文链接:http://www.cnblogs.com/fish-li/archive/2013/05/28/3104750.html Session与复杂数据类型 Session有三种工作模式,拿A ...

  10. 初识Dubbo 系列之5-Dubbo 成熟度

    成熟度 功能成熟度 Feature特征 Maturity成熟度 Strength强度 Problem问题 Advise建议 User用户 并发控制 Tested 并发控制   试用   连接控制 Te ...