cookie和session以及token

是一种在客户端存储数据的具体实现方式.每次客户端请求都可以携带上cookie,存放一些相关数据信息.

session

是一种会话状态的概念.主要的实现是将sessionId保存在服务端,以此来验证客户端发来的session会话.用户在登录后服务器为其生成一个sessionId,并保存在服务端,再将该sessionId发送回客户端.以后客户端的请求需要带上该sessionId,服务端就可以根据该id来验证用户身份.

cookie与session

客户端通常是使用cookie来保存用户的sessionId

token

是一种登录凭证.服务端根据客户端发来的信息,对其进行加密,然后把该字符串作为凭证发回给用户,以后用户请求时只要带上这个凭证,服务端就根据该凭证来解密,获得里面的相关信息.

JWT(JSON Web Token)

JWT只要由头部,负载以及签名组成.

头部主要存放的是关于jwt的一些信息,比如签名使用的算法,类型等.

负载主要存放的是jwt的一些需要传递的数据,包含以下.也可以定义自定义字段.

  • iss (issuer):签发人
  • exp (expiration time):过期时间
  • sub (subject):主题
  • aud (audience):受众
  • nbf (Not Before):生效时间
  • iat (Issued At):签发时间
  • jti (JWT ID):编号

签名是通过密钥对前面两部分进行加密

JWT的缺陷,由于服务端不保存JWT的信息,因此JWT一旦签发出去,在到期之前,该JWT都是有效的.而且JWT本身包含了一些认证信息,存在风险.