现在SPA(Single Page Application, 单页面应用)和前后端分离已经是主流. 基于Token的验证非常适合这种构架.
Difference between Token-based Auth and Cookie-based Auth
基于Cookie的验证
基于Cookie的验证是有状态的 (stateful). 前后端都要为验证保存状态: 后端要保存active session的信息, 前端要用cookie保存sessionId. 流程如下:用户输入登录信息
服务器验证后, 创建session并保存到数据库
带着sessionId的cookie保存到浏览器中
接下来的所有请求, 后台通过cookie携带的sessionId以找到对应的session.
用户登出时, 前后端都要销毁session
基于Token的验证
近些年SPA, web API, 和IoT(Internet of Things, 物联网)的崛起带动了基于Token的验证, 通常就是指JWT(Json Web Token)
JWT是无状态的(stateless), 后端不必保存有关session的信息. 后端只需要验证每次请求中携带的Token即可验证请求的真实性.
Token通常以Bearer {JWT}的形式保存在Authentication header中, 也可以放到POST body或query parameter中.
流程如下:用户输入登录信息
服务器验证后, 返回一个签名(signed)的token. 该token存储在前端, 通常在localStorage中, sessionStorage或cookie也可以.
接下来的请求中token被加到Authentication Header中, 或者POST body / query parameter中.</