http --- > 基本认证与摘要认证

基本认证:

// (a)客户端:查询
GET /cgi-bin/checkout?cart=17854 HTTP/1.1

// (b)服务器:质询
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Shopping Cart"

// (c)客户端:响应
GET /cgi-bin/checkout?cart=17854 HTTP/1.1
Authorization: Basic YnJpYW4tdG90dHk6T3ch

// (d)服务器:成功,返回信息
HTTP/1.1 200 OK

基本认证的缺陷在于:账号和密码是明文发送,不安全.
摘要认证:

// (a)客户端:查询
GET /cgi-bin/checkout?cart=17854 HTTP/1.1

// (b)服务器:质询
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest
    realm="Shopping Cart"
    qop="auth,auth-int"
    nonce="66C4EF58DA7CB956BD04233FBB64E0A4"

// (c)响应
GET /cgi-bin/checkout?cart=17854 HTTP/1.1
Authorization: Digest
    username="bri"
    realm="Shopping Cart"
    nonce="66C4EF58DA7CB956BD04233FBB64E0A4"
    uri="/cgi-bin/checkout?cart=17854"
    qop="auth"
    nc=0000001,
    cnonce="CFA9207102EA210FFC1120F6001110D073"
    response="E483C94FOB3CA29109A7BA83D10FE519"

// (d)成功
HTTP/1.1 200 OK
Authorization-Info: nextnonce=
    "29FE72D109C7EF23841AB914F0C3B831"
    qop= 0auth0
    rspauth="89F5A4CE6FA932F6C4DA120CEB754290"
    cnonce="CFA9207102EA210EA210FFC1120F6001110D073"
    ....

摘要认证的3个组件:

// *摘要由以下3个组件计算出来:
// 1.由单向散列函数H(d)和摘要KD(s,d)组成的一对函数,其中s表示密码,d表示数据
// 2.一个包含了安全信息的数据块,包括密码,称为A1
// 3.一个包含了请求报文中非保密属性的数据块,称为A2

安全性相关的数据(A1)

// A1是密码和受保护信息的产物,它包含有用户名、密码、保护域和随机数等内容

与报文有关的数据(A2)

// 数据库A2表示的是与报文自身有关的信息,比如URL、请求方法和报文实体的主体部分
// A2有助于防止方法、资源或报文被篡改

摘要认证会话

// 客户端在响应保护空间的WWW-Authenticate质询时(请求账号、密码信息),会启动一个此保护空间的认证会话
// 在客户端收到另一条来自保护空间的任意一台服务器的WWW-Authenticate质询之前,认证会话会一直持续

预授权

// 在普通的认证方式中,事务结束之前,每条请求都要有一次 请求/质询 的循环
// 如果客户端事先知道下一个随机数是什么,就可以取消这个 请求/质询 循环
// 这样客户端就可以在服务器发出请求之前,生成正确的Authorization首部了.

对称认证

// RFC 2617扩展了摘要认证机制,允许客户端对服务器进行认证.
// 通过提供客户端随机数来实现的.
// 它是可选的.

增强保护质量

// 可以在三种摘要首部中提供qop(保护质量)字段:WWW-authenticate、Authorization和Authentication-Info
// 通过qop字段,客户端和服务器可以对不同类型及质量的保护进行协商.

多重质询

// 服务器可以对某个资源发起多重质询.如:服务器不了解客户端的能力,可以既提供基本认证质询,又提供摘要认证质询
// 客户端在面对多重质询时,必须以它所支持的最强的质询机制来应答

差错处理

扫描二维码关注公众号,回复: 6613437 查看本文章
// 在摘要认证中,如果某个指令或其值使用不当,或者缺少某个必要指令,就应该使用响应400 Bad Request
// 如果请求的摘要不匹配,就应该记录一次登录失败.某客户端连续多次失败可能说明有攻击者正在猜测密码

保护空间

// 阈值,与被访问服务器的标准根URL结合在一起,定义了保护空间
// 通过域可以将服务器上的受保护资源划分为一组保护空间,每个空间都有自己的认证机制 和/或 授权数据库

参考《HTTP权威指南》P308~P318

猜你喜欢

转载自blog.csdn.net/piano9425/article/details/92849192