HTTP的认证方式之DIGEST
详细的说明文档:WWW-Authenticate - HTTP | MDN (mozilla.org)
1.是什么
摘要认证(Digest Authentication)是一种用于在网络通信中验证用户身份的认证方法。它主要应用于HTTP和其他应用层协议中。
Digest认证相对于基本认证更加安全,因为它不直接传输明文密码。但它也不是完全的安全解决方案,因为在中间人攻击等情况下,仍然可能受到攻击。在现代网络中,更安全的认证方法通常是基于令牌(Token)的认证机制。
2.认值流程
类似与Basic认证流程:
Digest认证的整体流程如下:
-
客户端发送请求: 客户端向服务器发送请求,请求中包含需要访问的资源路径。
-
服务器返回挑战信息: 服务器接收到客户端请求后,返回一个“质询”信息(Challenge)给客户端。这个挑战信息是一个包含随机数、领域名(realm)以及其他一些参数的字符串。
-
客户端生成响应: 客户端使用用户名、密码和挑战信息来生成一个响应字符串。这个响应字符串的生成过程包括以下几个步骤:
- 拼接:将用户名、领域名和密码用冒号分隔,并将它们拼接成一个字符串。
- 对字符串进行哈希:对上述拼接后的字符串进行哈希运算,通常使用MD5或SHA-1等哈希算法。
-
客户端发送响应: 客户端将生成的响应字符串发送给服务器,放在请求的"Authorization"头部中。
-
服务器验证响应: 服务器收到客户端的响应后,使用相同的方式在服务器端重现生成响应字符串。然后将客户端发送的响应字符串和服务器端生成的响应字符串进行比较。如果两者相等,说明客户端拥有正确的用户名和密码。