Cookie-based vs Token-based
有两种认证方式,一种是基于 cookie 的认证,另一种是基于 token 的认证。后者实现往往是通过 JSON Web Token (以下简称 JWT)实现的。首先要说明一下两种认证方式的区别:
cookie-based authentication 的认证流程是:
- 用户填写 credentials,包括用户名,邮箱,密码这些内容;
- Server 服务器验证这些 credentials 是否正确,如果正确,则认证成功,创建一个 session 存储在数据库中;
- 将这个 session 的 session id 存储在浏览器端的 cookie 里;
- 接下来的每一个请求,都会带着这个 session id,Server 在接收请求后也会验证 session id 与 session 是否匹配;
- 一旦用户登出,client 端和 server 端的 session 均被摧毁;
token-based authentication:
- 用户填写 credentials,包括用户名,邮箱,密码;
- Server 服务器验证这些 credentials 是否正确,如果认证成功,则返回一个 signed token;
- 这个 token 会被存储在 client 端,大部分是在 localStorage,但也会存储在 session storage 或是 cookie 里;
- 接下来的每一个请求,都会带着 token 作为额外的 authentication 信息。
- Server 收到请求后,首先 decode 这个 token 并对 token 里的 signature 进行验证;
为什么会说 token-based 更好:
- stateless,也就是不需要再在 server 端保存一份纪录,但 server 端要保存用于签名时用的「secret key」;
- cookie 对跨域 CORS 操作不友好,token 则没有这个问题;