HTTP Basic认证
每次客户端请求都需带上Authorization请求头, 值为"Basic xxx"。xxx为对用户名和密码进行Base64编码后的值。 若客户端是浏览器,则浏览器会提供一个输入用户名和密码的对话框,用户输入用户名和密码后,浏览器会保存用户名和密码,用于构造Authorization值。当关闭浏览器后,用户名和密码将不再保存。
用户名/密码经过Base64加码后,这个Base64码值可以轻易被解码并获得用户名/密码,所以此认证方式并不安全。为了传输安全,需要配合SSL使用。
HTTP另外 Digest认证
Digest认证步骤如下:
第一步:客户端访问Http资源服务器。由于需要Digest认证,服务器返回了两个重要字段nonce(随机数)和realm。
第二步: 客户端构造Authorization请求头,值包含username、realm、nouce、uri和response的字段信息。其中,realm和nouce就是第一步返回的值。nouce只能被服务端使用一次。uri(digest-uri)即Request-URI的值,但考虑到经代理转发后Request-URI的值可能被修改、因此实现会复制一份副本保存在uri内。response也可叫做Request-digest,存放经过MD5运算后的密码字符串,形成响应码。
第三步:服务器验证包含Authorization值的请求,若验证通过则可访问资源。
Digest认证可以防止密码泄露和请求重放,但没办法防假冒。所以安全级别较低。
Digest和Basic认证一样,每次都会发送Authorization请求头,也就相当于重新构造此值。所以两者易用性都较差。