基本认证与摘要认证

本文总结自: https://www.cnblogs.com/huey/p/5490759.html

浏览器与服务端之间可以通过cookie进行身份验证,那么,桌面应用程序与服务端呢?

BASIC认证(基本认证)

当客户端向服务端进行数据请求时,如果客户端尚未被认证,则http服务器将使用基本认证对客户端的用户名密码进行认证,以确认用户是否合法,一般方法为 将 用户名:密码 用base64加密后放入请求头中的Authorization,再发送给服务器,此方式为基本认证。

基本认证也能用于浏览器端,但相对较少。

基本认证过程:

1.http请求头中添加Authorization: Basic + base64加密字段

2.验证通过,返回内容;验证不通过,返回头中的WWW-Authenticate中会有相关说明

备注: 基本认证使用base64编码,安全性低容易解码,因此一般使用HTTPS传输,相对安全性会高一些。

 

Digest认证(摘要认证)

http1.1中提出的用以替代基本认证的方案

1.密码不再明文传递,而是用摘要来代替,一般使用MD5加密(基本不可逆,除非太简单)生成,服务端只存储摘要与客户端发来的摘要对比。

2.防止重放攻击,服务端向客户端发送随机数nonce,客户端生成摘要时得把nonce放在密码上,服务端知道用户的原始密码及nonce,接收到请求后再临时生成摘要与之对比

3. 通过客户端产生随机数cnonce的方式,支持客户端对服务器的认证。

4.通过对内容也加入摘要计算的方式,可有选择的防止对报文内容的篡改。

摘要认证过程:

1.服务端接受客户端请求,生成随机数nonce,放在响应头WWW-Authenticate,状态码为401 Unauthorized

2.客户端发现是401,弹出让用户输入用户名密码的认证窗口,用户输入后生成摘要,放入请求头中的Authorization,

如果此时客户端也要对服务端进行认证,可生成并发送客户端随机数cnonce

3.服务端基于用户原始密码及nonce重新生成摘要与客户端发来的摘要对比,如果客户端反过来用客户端随机数对服务器进行质询,就会创建客户端摘要。

服务器可以预先将下一个随机数计算出来,提前将其传递给客户端,这样下一次客户端就可以预先发送正确的摘要了。

 

转载于:https://www.cnblogs.com/yanze/p/9177002.html

你可能感兴趣的:(基本认证与摘要认证)