怎么设计用户身份验证模块?
发布于 6 年前 作者 FlyerJay 3706 次浏览 来自 问答

我的项目需要做一个用户登录模块,接口是restful风格的,某些接口需要带上用户id查询。我想过使用session-cookie、jwt等方式,不想一尘不变,所以来问题下采用哪种方式比较有意思,个人项目,不怕踩坑

7 回复

看了jwt之后,不是很理解接口无状态

  1. jwt是将用户信息加密成一个字符串存放在用户手中
  2. 用户带着加密字符串请求服务器
  3. 服务器解密字符串获取用户信息(被加密的就是用户信息)
  4. 鉴权完成,用用户信息做后续操作

cookie-sesion不安全,未加密的信息被存储在用户手中

jwt里存储的用户信息并没有加密,只是base64转码而已。 jwt这个串整体上是加密的,伪造不了,要不然服务器解密不了。无状态可以理解为服务器端没有存储任何数据,客户端传输一个jwt串,服务端能解密出来,知道这个用户是谁。

cookie-session的话 也不能说不安全,服务器会生成一个sessionID, 然后外加一些用户信息,比如用户ID存在内存或者数据库里,这就是有状态了,可以再通过一个加密算法加密sessionID,生成cookie返给客户端。客户端每次请求都带上cookie, 服务端解密后得到sessionID,再去查询这个用户是谁。

JWT确实无需在服务端保存用户信息,可以把userId之类保存在token中,确实可以无状态,但像强制下线,多设备登录等还是需要服务端保存状态。

来自酷炫的 CNodeMD

@liuzhiguo11 这样说好像理解了

jwt: 一般将用户id和exp,然后通过加密给用户,用户在拿到后存储到本地比如session、cookie、localstorage,在需要鉴权的请求的时候携带token到服务器,服务器拿到这个token后,解析,如果解析通过,且没有超时就认为是一个合法用户,反正则非法。

回到顶部