HTTP认证框架
服务器端
返回401
状态码,告诉客户端需要验证信息。WWW-Authenticate: <type> realm=<realm>
提供如何进行验证。<type>
指的是验证的方案,realm
:指定了一个所要访问的域(不同域有不同的访问权限)
客户端
Authorization: <type> <credentials>
:携带服务端要求的用户的身份凭证
- 代理认证:返回
407
,(Proxy-Authenticate
:代理服务器需要的验证方式)(Proxy-Authorization
:代理服务器需要携带用户的身份凭证)
验证方案
基本认证Basic:通过用户id和密码,结合base64加密来验证身份,但是base64加密是可逆的,所以安全性不高。
Cookie
Cookie认证机制就是为一次请求认证在服务端创建一个Session对象,同时在客户端的浏览器端创建了一个Cookie对象;通过客户端带上来Cookie对象来与服务器端的session对象匹配来实现状态管理的。默认的,当我们关闭浏览器的时候,cookie会被删除。但可以通过修改cookie 的expire time使cookie在一定时间内有效;OAuth
OAuth(开放授权)是一个开放的授权标准,允许用户让第三方应用访问该用户在某一web服务上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
这种基于OAuth的认证机制适用于个人消费者类的互联网产品,如社交类APP等应用Token
json_web_tokenCSRF
HTTP常用认证机制摘要认证:不直接发送密码,而是发送密码的摘要信息,表明客户端是知道密码的。
MD5加密不可逆:可以理解为把一头牛做成一包包牛肉干。但是无法把牛肉干复原成原来的牛。因为MD5加密的过程当中,无论数据的原始长度是多少,都会对原始数据进行有损压缩,最后都会生成一个固定长度的消息摘要
摘要+随机数:防止重放攻击(拿着加密的密码去一直请求服务器):服务器向客户端发送一个会不停变化的特殊令牌,客户端在计算摘要之前要先把这个令牌附加到密码上去。
摘要的握手机制: www-authentic质询,服务器发送域,随机数和算法=>客户端用authorization响应,发送响应摘要=>服务端对摘要进行认证,用authentication-info发送下一个随机数