前言
JWT,我并不陌生。但如何去权衡其中利弊,根据不同需求去决定是否使用,如何使用,我还是一知半解,于是希望通过此篇来进一步学习
基于token的认证方式
- 用户向服务器发送用户名和密码。
- 服务器将相关数据,比如用户 ID,认证有效期等信息签名后生成 token 返回给客户端。
- 客户端将 token 写入本地存储。
- 用户随后的每一次请求,都将 token 附加到 header 中。
- 服务端获取到用户请求的 header,拿到用户数据并且做签名校验,如果校验成功则说明数据没有被篡改,是有效的,确认 token 在有效期内,用户数据就是有效的。
组成
- header
- payload
- signature
存在的问题:
- Token Expiration
- Revoked Token Database |
- Additional DB calls
- Token Revocation Problem
- Inability to easily revoke tokens
- Lack of real-time revocation
- Length of Tokens
- Potential URL and cookie length issues
- Sending large volumes of data
- Need for State Maintenance
- Need to maintain user state
- Limited statelessness
- Security and Encryption
- Potential vulnerabilities
- Lack of encryption for payload
使用时需要注意的点
- 由于 jwt 返回的 Token 中的数据仅做了 Base64 处理,没有加密,所以不应放入重要的信息。
- jwt Token 由于是无状态的,任何获取到此 Token 的人都可以访问,所以为了减少盗用,可以将 Token 有效期设置短一些。对一些重要的操作,尽量再次进行认证。
- 网站尽量使用 HTTPS,可以减少 Token 的泄漏。
有办法使一个在有效期内的JWT废弃掉吗
wip