RFC 7235 定义了一个HTTP身份验证框架。服务器向客户端发送请求质询,客户端提供身份验证凭证。工作流程如下:服务器端向客户端返回 401
(Unauthorized,未被授权的) 状态码,并在 WWW-Authenticate
首部提供如何进行验证的信息,其中至少包含有一种质询方式。之后有意向证明自己身份的客户端可以在新的请求中添加 Authorization
首部字段进行验证,字段值为身份验证凭证信息。通常客户端会弹出一个密码框让用户填写,然后发送包含有恰当的 Authorization
首部的请求。
状态码
401
Unauthorized
客户端错误,缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。
这个状态码会与 WWW-Authenticate 首部一起发送,其中包含有如何进行验证的信息。
HTTP/1.1 401 Unauthorized
Date: Wed, 21 Oct 2015 07:28:00 GMT
WWW-Authenticate: Basic realm="Access to staging site"
403
Forbidden
客户端错误,服务器端有能力处理该请求,但是拒绝授权访问。
HTTP/1.1 403 Forbidden
Date: Wed, 21 Oct 2015 07:28:00 GMT
407
Proxy Authentication Required
客户端错误,由于缺乏位于浏览器与可以访问所请求资源的服务器之间的代理服务器(proxy server)要求的身份验证凭证,发送的请求尚未得到满足。
这个状态码会与 Proxy-Authenticate 首部一起发送,其中包含有如何进行验证的信息。
HTTP/1.1 407 Proxy Authentication Required
Date: Wed, 21 Oct 2015 07:28:00 GMT
Proxy-Authenticate: Basic realm="Access to internal site"
WWW-Authenticate 与 Proxy-Authenticate
这两个响应消息首部指定了身份验证的方法,他们需要明确要进行验证的方案,这样进行授权的客户端就知道如何提供身份凭证信息。
WWW-Authenticate: <type> realm=<realm>
Proxy-Authenticate: <type> realm=<realm>
realm 进行保护的区域或范围。
Authorization 与 Proxy-Authorization 首部
请求消息首部,用来向(代理)服务器证明用户代理身份的凭证。
Authorization: <type> <credentials>
Proxy-Authorization: <type> <credentials>
验证方案
IANA维护了 一系列的验证方案 ,Amazon AWS提供了一些验证方案, 常见的验证方案包括:
- Basic:base64编码凭证,不安全,应与HTTPS/TLS协议搭配使用
- Bearer:bearer令牌通过OAuth2.0保护资源
- Diegest:md5 、SHA加密
参考
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Authentication
http://qnimate.com/understanding-http-authentication-in-depth/