目前全文是翻译的,讲的主要是 cookie 验证和 token 验证的区别,cookie 验证准确的说是利用 cookie 来作为媒介,存储 session ID 进行验证,token 其实也可以借助 cookie 来存储,不过下文中提到的 cookie 验证主要是指 session ID 存储到 cookie 中进行的验证。token 验证主要是指 token 存储在 Authorization Header 中进行的验证。
Cookie
cookie 验证是用于长时间用户验证,cookie 验证是有状态的,意味着验证记录或者会话需要一直在服务端和客户端保持。服务器需要保持对数据库活动会话的追踪,当在前端创建了一个 cookie,cookie 中包含了一个 session 标识符。传统 cookie 会话的验证流程:
-
用户登录,输入账号密码
-
服务器验证用户账号密码正确,创建一个 session 存储在数据库(或者 redis)
-
将 session ID 放进 cookie 中,被存储在用户浏览器中。
-
再次发起请求,服务器直接通过 session ID 对用户进行验证
-
一旦用户登出,则 session 在客户端和服务器端都被销毁
Token
token 验证是无状态的,服务器不记录哪些用户登录了或者哪些 JWT 被发布了,而是每个请求都带上了服务器需要验证的 token,token 放在了 Authorization header 中,形式是 Bearer { JWT },但是也可以在 post body 里发送,甚至作为 query