Session token (传引用)

  • 执行
    • server返回session token,client保存session token到cookie中。
    • 每次请求都带着session token,服务器从相应缓存中取出session id对应的session信息,判断是否可以执行请求。
  • 缺点
    • 当有多个服务器时,要么使用redis这类工具保存session信息,这时redis又有单点的问题。或者session sticky把请求发往同一server。都是在给micro service打补丁。

JWT (传值)

  • 执行
    • server把详细的信息记录到JWT中(包括header, payload和signature), signature是使用server的secret和(header+payload)生成(md5,sha1,sha256这种),因此只有server能判断JWT的真伪。
    • server把JWT返回client,下一次请求带着JWT,由于JWT中包含必要信息,server可以判断是否执行请求。
  • 缺点
    • JWT的header和payload只是BASE64封装,相当于明文,因此不适合传递机密信息。(只能用于https这样的加密通道)
    • JWT可以防止篡改,但不能防止JWT被盗用(session token也不能)。
    • 如果JWT被盗用,又必须使用黑名单的方式来打补丁,而这个黑名单又要使用redis这类工具,那么单点问题又出来了。

session管理可以通过检查session的lastupdated值和timeout机制把idle的session踢掉,下一次同一个session token过来,因为找不到对应的session,就可以redirect到登陆页面。
而JWT,server根本就不管,server无法判断这个请求是否过期。