HTTP认证与cookie、session、token

2015-08-04 01:23:16

第一部分 认证方式

HTTP提供多种认证方式,包括BASIC_AUTH,JWT_AUTH,O_AUTH等

其中BASIC_AUTH是最基本的。它的大概流程是这样的:

1.浏览器发起请求

2.服务器返回401

3.浏览器弹出账户名密码登录,用户填写

4.浏览器发出BASE64加密完的用户名和密码数据

5.服务器收到数据解密,从HTTP服务器中找到user-passwd相关文件查看是否符合,并且SET-COOKIE

6.浏览器收到,按照SET-COOKIE中指定的方法,保存cookie在内存或持久化。并且根据域和路径,在下次访问相同网站的时候,自动携带放在Header中的cookie中


这样,认证的经过BASE64编码后的账户名和密码存在浏览器,不太安全。所以有时候,在cookie中存放一个sessionid,在服务器中存放sessionid对应的相关信息。


值得注意的是,session和cookie本身可以传递用来传递很多信息,不仅仅是认证。


然而,由于HTTP的无状态性,认证并保持登录状态,是他们的主要任务之一。



第二部分 cookie, session与token

一、cookie


cookie保存在客户端


cookie的生成

1.通常,服务器在HTTP响应头中加入一行特殊指示以提示浏览器按照指示生成相应的cookie。

2.cookie也可以由JS等脚本在客户端生成。


cookie的内容:

名字,值,过期时间,路径和域。

如果不指定过期时间,则默认为浏览器会话期间,保存在内存中。如果指定过期时间,则需要在客户端做持久化。


常用模式:

服务器在Response Header中添加set-cookie

客户端在Request Header的添加cookie



二、session


客户端保存sessionid,服务器端通过sessionid索引到具体的session信息,这个session信息存在客户端,sessonid存在客户端


通常客户端保存sessionid是在cookie中,因此session与cookie联系紧密


在服务器端分布式架构时,需要注意session的一致性问题


三、token

通常来说,cookie和session都是互联网时代的名词,sessionid本身就是一项cookie,而cookie的管理是由浏览器来完成的


token这个词是移动互联网时代的产物。相比网站要通过浏览器的cookie,APP可以直接保存信息或者信息索引。所以大家起了个新名字,token,用来在APP客户端保存一些信息。


token的特点如下:


1.token在APP持久化,可以通过放在HTTP Body发出去,可以在HTTP Header中传递,甚至通过URL发出去。


2.token既可以当做key-value中的key,类似sessionid。又可以直接将信息包含在token字符串中(比如JWT)。


3.token常被用在身份认证中,可以在发送请求时判断是否携带。而cookie与session除了身份认证信息,还常包括一些其他状态相关信息,并且由浏览器来判断是否发送。


好吧,我得承认一提到token,就会想到OAuth,但是token这个概念应该不仅仅是做第三方授权的。两者不能划等号。


done