在本章中,我们需要完成用户的会话管理功能:
- 登录;
- 获取用户信息。
JWT 简介
HTTP
是一种无状态协议,这意味着每次请求都是独立的,没有上下文关系。这就需要一种机制来保存用户的状态信息,Cookie
就是其中一种解决方案。Cookie
是存储在用户浏览器中的小块数据,可以在后续请求中发送给服务器,用于保持会话状态。然而,Cookie
也有一些限制,例如跨域问题和安全性问题。相比之下,JWT
是一种更现代的解决方案,可以通过 HTTP
头部传递,无需依赖 Cookie
,且具有更好的跨域支持和安全性。
JWT
全名Json Web Token
,其看起来是一串无序的字符串。由三部分组成:头部(Header
)、负载(Payload
)和签名(Signature
)。
在前后端分离的项目中,用户登录后,服务端生成JWT
并返回,客户端自行保存它,例如浏览器本地储存Local Storage
。在后续的请求中,通常在Header
头的Authorization
字段中携带它,以完成用户身份认证。
安装 golang-jwt
生成验证JWT
需要复杂的加密解密的逻辑,自己编写需费一番手脚。所幸的是,前人已经造好了轮子,直接安装调用即可。
$ go get -u github.com/golang-jwt/jwt/v5