目录

一、Basic基础认证

二、Digest摘要认证

三、SSL Client认证

四、HTTP 表单认证


HTTP提供了一套标准的身份验证框架:服务器可以用来针对客户端的请求发送质询(challenge),客户端根据质询提供身份验证凭证。质询与应答的工作流程如下:服务器端向客户端返回401(Unauthorized,未授权)状态码,并在WWW-Authenticate头中添加如何进行验证的信息,其中至少包含有一种质询方式。然后客户端可以在请求中添加Authorization头进行验证,其Value为身份验证的凭证信息。

在HTTP标准验证方案中,我们比较熟悉的是"Basic"和"Digest",前者将用户名密码使用BASE64编码后作为验证凭证,后者是Basic的升级版,更加安全,因为Basic是明文传输密码信息,而Digest是加密后传输。

一、Basic基础认证

Basic认证是一种较为简单的HTTP认证方式,客户端通过明文(Base64编码格式)传输用户名和密码到服务端进行认证,通常需要配合HTTPS来保证信息传输的安全。

客户端请求需要带Authorization请求头,值为“Basic xxx”,xxx为“用户名:密码”进行Base64编码后生成的值。 若客户端是浏览器,则浏览器会提供一个输入用户名和密码的对话框,用户输入用户名和密码后,浏览器会保存用户名和密码,用于构造Authorization值。当关闭浏览器后,用户名和密码将不再保存。

凭证为“YWxhzGRpbjpvcGVuc2VzYWl1”,是通过将“用户名:密码”格式的字符串经过的Base64编码得到的。而Base64不属于加密范畴,可以被逆向解码,等同于明文,因此Basic传输认证信息是不安全的。

Basic基础认证图示:

缺陷汇总

1.用户名和密码明文(Base64)传输,需要配合HTTPS来保证信息传输的安全。
2.即使密码被强加密,第三方仍可通过加密后的用户名和密码进行重放攻击。
3.没有提供任何针对代理和中间节点的防护措施。
4.假冒服务器很容易骗过认证,诱导用户输入用户名和密码。

二、Digest摘要认证

Digest认证是为了修复基本认证协议的严重缺陷而设计的,秉承“绝不通过明文在网络发送密码”的原则,通过“密码摘要”进行认证,大大提高了安全性。

Digest认证步骤如下:
第一步:客户端访问Http资源服务器。由于需要Digest认证,服务器返回了两个重要字段nonce(随机数)realm
第二步:客户端构造Authorization请求头,值包含username、realm、nouce、uriresponse的字段信息。其中,realm和nouce就是第一步返回的值。nouce只能被服务端使用一次。uri(digest-uri)即Request-URI的值,但考虑到经代理转发后Request-URI的值可能被修改、因此实现会复制一份副本保存在uri内。response也可叫做Request-digest,存放经过MD5运算后的密码字符串,形成响应码。
第三步:服务器验证包含Authorization值的请求,若验证通过则可访问资源。
Digest认证可以防止密码泄露和请求重放,但没办法防假冒。所以安全级别较低。
Digest和Basic认证一样,每次都会发送Authorization请求头,也就相当于重新构造此值。所以两者易用性都较差。

Digest认证图示:

参考博客:https://www.cnblogs.com/xiaoxiaotank/p/11078571.html

三、SSL Client认证

SSL认证安全级别较高,但需要承担证书费用。SSL认证过程中涉及到一些重要的概念,数字证书机构的公钥、证书的私钥和公钥、非对称算法(配合证书的私钥和公钥使用)、对称密钥、对称算法(配合对称密钥使用)。
大致的认证步骤如下:
第一步:客户端请求服务资源,服务器要求客户端出示数字证书。
第二步:客户端发送数字证书
第三步:服务器通过数字证书机构的公钥验证数字证书的合法性,验证通过后取出证书的公钥。
第四步:服务端随机生成一个随机数即为对称密钥,并使用非对称算法和证书公钥加密。这个加密后的字符串,只有发送的客户端能解。
第五步:客服端使用非对称解密算法和证书私钥获取服务端发送的对称密钥。后续客户端和服务端的请求直接基于对称算法和对称密钥。由于只有客户端和服务端有对称密钥,所以后续发送的请求较安全。
SSL可以防泄漏、假冒、重放,所以在Web系统中得到了广泛的应用。
SSL客户端认证在实际中用得不多,因为一来需要在客户端中安装证书(升级麻烦)、二来需要承担证书费用。

四、HTTP 表单认证

基于表单的认证方式并不存在于HTTP规范。所以实现方式也呈现多样化。表单认证一般都会配合cookie+sessiond的使用,现在绝大多数的Web站点都是使用此认证方式。用户在登录页中填写用户名和密码,服务端认证通过后会将sessionId返回给浏览器端,浏览器会保存sessionId到浏览器的Cookie中。因为Http是无状态的,所以浏览器使用Cookie来保存sessionId。下次客户端发送的请求中会包含sessionId值,服务端发现sessionId存在并认证过则会提供资源访问。

Http协议的身份认证相关推荐

  1. 身份认证协议攻击:黑客不希望你了解的事情

    身份认证协议是计算机网络中实现身份验证和授权的基本机制.随着互联网的发展,越来越多的应用程序需要提供对远程用户的访问控制和身份认证机制.为了更加安全和可靠地实现身份认证,人们不断地提出新的身份认证协议 ...

  2. 基于Python实现的SKey身份认证协议

    资源下载地址:https://download.csdn.net/download/sheziqiong/85621996 SKey 身份认证协议的代码实现 本项目为课程实验内容,简单模拟了通过S/K ...

  3. 五、大话HTTP协议-HTTP之URL编码、身份认证问题

    在说明URL编码之前,先回顾编码和字符集的相关基础知识,再引出为什么URL中需要做编码,以及如何编码的.最后顺便介绍了下HTTP的身份认证问题.这些知识可谓是基础中的基础,重点中的重点了,不仅HTTP ...

  4. jws webservice 跳过https认证_基于OAuth2的OIDC (OpenId Connect)身份认证

    OIDC协议 OIDC(OpenID Connect)是在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议. OAuth2协议 OAuth2是一个授权协议,它无法提供完善的 ...

  5. HTTPS接口加密和身份认证

    1.为什么要用HTTPS代替HTTP HTTPS和HTTP的区别 1)https协议需要到CA申请证书,一般免费证书很少,需要交费 2)http是超文本传输协议,信息是明文传输,https则是具有安全 ...

  6. OIDC(OpenId Connect)身份认证

    1 什么是OIDC? 看一下官方的介绍(http://openid.net/connect/): OpenID Connect 1.0 is a simple identity layer on to ...

  7. 基于http协议的api接口对于客户端的身份认证方式以及安全措施[转]

    基于http协议的api接口对于客户端的身份认证方式以及安全措施 由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid) ...

  8. 身份认证协议攻击怎么解决

    身份认证协议是计算机网络中实现身份验证和授权的基本机制.随着互联网的发展,越来越多的应用程序需要提供对远程用户的访问控制和身份认证机制.为了更加安全和可靠地实现身份认证,人们不断地提出新的身份认证协议 ...

  9. ECHAP:身份认证的安全协议

    ECHAP:身份认证 的安全协议 格方网络安全有限公司 李志录 何敏 ---- 身份认证在计算机系统和网络中非常重要.目前采用的身份认证技术主要有三种:固定密码的身份认证(如普通的PAP认证.人体指纹 ...

  10. Web服务统一身份认证协议设计与实现

    单点登录(SSO)是目前比较流行的企业业务整合的解决方案之一,它的机制是在企业网络用户访问企业网站时作一次身份认证,随后就可以对所有被授权的网络资源进行无缝的访问,而不需要多次输入自己的认证信息.We ...

最新文章

  1. Cargo 教程介绍
  2. 简单好用的PHP无限分类
  3. mybatis源码深度解析_30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软
  4. android动画能超过父容器吗,Android中你不得不知道的动画知识 (一)
  5. C#之反射又是什么东西
  6. c# 从一组数中随机抽取一定个数_C#产生指定范围随机数的几种方法-亮术网
  7. Live Meeting 音频视频使用端口设置
  8. 【算法大赛直播周】如何赋予机器更多“想象力”?《计算广告》作者刘鹏带你解密深度学习
  9. C#保存PictureBox或Bitmap图片为bmp|png|gif|jpg格式
  10. Comparable 与 Comparator 比较
  11. python下载文件的三种方法
  12. OrCAD PSpice仿真流程——Cadence 17.4
  13. C语言学习-翁凯(第三章笔记)
  14. html5如何添加图片菜鸟教程,菜鸟入门教程 HTML5的常见用法
  15. 英文科技论文各部分的时态和语态
  16. math.abs() java_Java中使用Math.abs你入坑了?
  17. (31)ObjectARX2015 + vs2012选择集
  18. 修改电脑配置的方法(被骗之后才学会的)
  19. 硬件知识:电源开关上的“1“和“0“分别是什么意思
  20. 全国程序员高考卷,开始答题!

热门文章

  1. 识人 用人 激人 留人 斩人
  2. 英语知识系列:英文与中文句子构成成分的对应关系
  3. linux lpte_所有的linux和unix的指令行下的指令都一样吗
  4. 参加软件测试培训找工作有前景吗
  5. BZOJ 5109 [CodePlus 2017]大吉大利,晚上吃鸡!
  6. 阿里p9 Python工程师,进阶书籍推荐
  7. Python与MySQL交互——简易用户注册登录
  8. Excel中Sheet(s)和Worksheet(s)的区别
  9. 如何修复cdn服务器异常,cdn服务器连接异常解决方法
  10. 视频太大怎么压缩,视频压缩怎么弄?