CNode

怎么设计用户身份验证模块?

问答
FFlyerJay发布于8 年前最后回复8 年前7 回复5019 浏览0 收藏

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

查看回复

回复 (7)

F
FlyerJay#1·8 年前

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

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

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

L
leiwei1991#3·8 年前

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

L
leiwei1991#4·8 年前

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

L
liuzhiguo11#5·8 年前

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

来自酷炫的 CNodeMD

M
miuqiang#7·8 年前

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

参与回复
登录后即可参与回复。登录