关于用户身份鉴权的技术选型与开发

  1. 使用 Token 而不是 Session
  2. 使用 JWT 而不是 Token
  3. 关于 JWT 和 TOKEN 的补充

使用 Token 而不是 Session

用 Token 的好处

  • 无状态:Token 存储在客户端,完全无状态
  • 可扩展:我们的负载均衡器可以将用户传递到任意服务器,因为在任何地方都没有状态或会话信息
  • 安全:Token 不是 Cookie。(The token, not a cookie.)每次请求的时候 Token 都会被发送。而且,由于没有 Cookie 被发送,还有助于防止 CSRF 攻击。即使在你的实现中将 token 存储到客户端的 Cookie 中,这个 Cookie 也只是一种存储机制,而非身份认证机制。

使用 JWT 而不是 Token

相同

都是访问资源的令牌

都可以记录用户的信息

都是使服务端无状态化

都是只有验证成功后,客户端才能访问服务端上受保护的资源

区别

Token:服务端验证客户端发送过来的 Token 时,还需要查询数据库获取用户信息,然后验证 Token 是否有效。

JWT:将 Token 和 Payload 加密后存储于客户端,服务端只需要使用密钥解密进行校验(校验也是 JWT 自己实现的)即可,不需要查询或者减少查询数据库,因为 JWT 自包含了用户信息和加密的数据。

关于 JWT 和 TOKEN 的补充

我之前会使用 JWT,现在我更加倾向简单、灵活的 token(UUID)。我为什么这么想呢?

  • JWT 太长了,我不喜欢。有些需要在地址栏直接访问API的场景,诸如附件访问的场景,只能在URL中拼接token以确定身份,此时我会考虑感官清爽。
  • JWT 对于会话管理的灵活性太差,做不了强制下线、同账号互踢
  • JWT 的优势是加密并携带用户信息以减少数据库访问。不过现在的项目都会使用到 redis,token + redis 的方案不仅可以拥有 JWT 的优势并且实现更加其他个性化的需求

转载请注明来源。 欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。 可以在下面评论区评论,也可以邮件至 sharlot2050@foxmail.com。

文章标题:关于用户身份鉴权的技术选型与开发

字数:509

本文作者:夏来风

发布时间:2021-04-10, 00:08:36

原始链接:http://www.demo1024.com/blog/java-session-token-jwt/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。