为了弥补BASIC认证存在的弱点,从HTTP/1.1起就有了DIGEST认证。DIGEST认证同样使用质询/响应的方式(challenge/response),但不会像BASIC认证那样直接发送明文密码。
所谓质询响应方式是指,一开始一方会先发送认证要求给另一方,接着使用从另一方哪接收到的质询码计算生成响应码。最后将响应吗返回给对方进行认证的方式。
因为发送给对方的只是响应摘要及由质询码产生的计算结果,所以比起BASIC认证,密码泄露的可能性就就降低了。
DIGEST认证步骤
步骤1: 请求需认证资源时,服务器会随着状态码401Authorization Required ,返回带WWW-Authenticate首部字段的响应。该字段包含质问响应方式认证所需的临时质询码(随机数,nonce)。
首部字段WWW-Authenticate内必须包含realm和nonce这两个字段的信息。客户端就是依靠向服务器回送这两个值进行认证。
nonce是一种每次随返回的401响应生成的任意随机数字符串。该字符串通常推荐由Base64编码的16进制数的组成形式,但实际内容依赖服务器的具体实现。
步骤2:接收到401状态码的客户端,返回的响应包含DIGEST认证必须的首部字段Authorization信息。
首部字段Authorization内必须包含username、realm、nonce、uri和response的字段信息。其中,realm和nonce就是之前服务器接收到的响应中的字段。
uesername就是realm限定范围内可进行认证的用户名。
uri(digest-uri)即Request-URI的值,但考虑到经代理转发后Request-URL的值就可能被修改,因此会复制一份保存在uri内
response也可叫做Request-Digest,存放经过MD5运算后的密码字符串,形成响应码
步骤3: 接收到包含首部字段Authorization请求的服务器,会确认认证信息的正确性。认证通过后则返回包含Request-URI资源的响应。
并且这时会在首部字段Authenticate-Info写入一些认证成功的相关信息。
DIGEST认证提供了高于BASIC认证的安全等级,但是和HTTPS的客户端认证机制相比仍旧很弱。DIGEST认证提供防止密码被窃听的保护机制,但并不存在防止用户伪装的保护机制。
DIGEST认证和BASIC认证一样,使用上不是那么便捷灵活,且达不到多数web网站对高度安全等级的追求标注。因此它的使用范围也有所限制。
转载于:https://juejin.im/post/5c21a9bde51d454517589e17
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)