Http协议 - 用户认证

简介

  • 用户认证即用户身份验证,直白点说就是识别http请求者是谁。

目的

  • HTTP最初是一个匿名,无状态的请求/响应协议,服务器处理来自客户端的请求,然后向客户端回送一条响应。
  • 随着行业的发展,人们意识到访问的安全性,服务器的一部分受保护的资源无法开放给普通用户,因此需要一种机制来识别用户。
  • 用户认证的初始需求是控制受保护资源的访问,如今已扩展出许多其它功能,例如:大数据杀熟等。

认证方式

质询/响应方式(challenge/response)

  • 质询/响应方式是HTTP提供了一套标准的身份验证框架,服务器可对客户端的请求发送质询(challenge),客户端根据质询提供身份验证凭证。
  • 工作流程:访问受限资源时,如果用户没有认证(即无用户信息或者用户信息过期),服务器将会返回401(Unauthorized,未授权)状态码,并在response header中添加WWW-Authenticate信息以告知客户端认证方式和相关信息,然后客户端在以后的每一次请求中添加Authorization头以供验证,其Value为身份验证的凭证信息。

基本认证(Basic Authentication)

  • 基本认证是原始的HTTP / 1.0协议的身份验证方案,它使用浏览器提供的对话框捕获用户名和密码,然后使用特定的编码传输凭据,具体流程如下:
  1. 访问受限资源,服务器返回如下:
返回状态吗: 401 Unauthorized
返回头包含如下项:
WWW-Authenticate: Basic realm="example.com"
  1. 浏览器弹出对话框,用户输入账号密码,浏览器重新发送请求:
请求头中包含以下项:
Authorization: Basic YWRtaW46MTIzNDU2
  1. 认证成功服务器通过该访问,认证失败则重新认证
  • 请求中Authorization头的YWRtaW46MTIzNDU2是由用户名admin和密码123456组合后使用base64编码而成,如下:
base64(username:password)
base64(“admin:123456”)
  • 缺陷:
  1. 账号信息随每个请求一起发送,未对密码进行加密。
  2. 发送的认证信息是固定的

摘要式身份验证(Digest Authentication)

  • 为解决基本认证存在的缺陷,从HTTP/1.1起支持Digest认证,Digest认证和基本认证使用同样的流程,只是做了以下改进:
  1. 服务器返回的WWW-Authenticate以及浏览器发送的请求中的Authorization更为复杂,夹带了更多的信息,以及一些随机数据。
  2. 不像基本认证那样固定使用base64编码,Digest认证默认采用MD5消息摘要算法对信息进行摘要,也可采用其它算法。
  • 具体流程如下:
  1. 访问受限资源,服务器返回如下:
返回状态吗: 401 Unauthorized
返回头包含如下项:
WWW-Authenticate: Digest realm="example.com", domain="127.0.1.1:8080", qop="auth", nonce="ZDJlY2VhNGM4ZDM2NGE1OThjMDgxYmNjN2M3NzZjMzg6ZXhhbXBsZS5jb206NWY5YTYzNDI6Mg==", opaque="5ccc069c403ebaf9f0171e9517f40e41", algorithm="MD5", stale="FALSE"
* realm的值是一个简单的字符串
* qop是认证的(校验)方式
* nonce是随机数, 可以用GUID
* opaque是个随机字符串,它只是透传而已,即客户端还会原样返回过来。
* algorithm 是个字符串,用来指示用来产生分类及校验和的算法对,如果该域没指定,则认为是“MD5“算法。
  1. 浏览器弹出对话框,用户输入账号密码,浏览器重新发送请求:
请求头中包含以下项:
Authorization: Digest username="admin", realm="example.com", nonce="ZDJlY2VhNGM4ZDM2NGE1OThjMDgxYmNjN2M3NzZjMzg6ZXhhbXBsZS5jb206NWY5YTY1ZDE6Mw==", uri="/auth/digest/index.html", algorithm=MD5, response="b61a0ccfe37998ceb879a95431a715ab", opaque="5ccc069c403ebaf9f0171e9517f40e41", qop=auth, nc=00000002, cnonce="53d217b9fdb2fa44"
* 其中username是用户名
* cnonce是客户端生成的随机字符串
* nc是运行认证的次数
* response就是最终计算得到的摘要
  1. 认证成功服务器通过该访问,认证失败则重新认证
  • 摘要计算方式
在最开始的RFC 2069中规定response计算方法如下:
HA1 = MD5(username:realm:password)
HA2 = MD5(method:uri)
response = MD5(HA1:nonce:HA2)
  • 和基本认证比较
  1. 对请求信息进行了摘要,保证了密码的安全性。
  2. 认证中有随机数字字符串,保证了认证信息不是固定的和防止重放攻击。
  3. 使用较为复杂

表单认证

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值