了解Token

了解Token

一、前世session

主要用于web端或者移动端身份验证,可简单理解为“令牌”、“身份证”,有了身份证明,就方便了出入一些隐秘场所的流程。
传统的身份验证是用户端发送账户、密码到服务器,经过加密后与数据库内存储的加密后的账号密码相比较,用户每次登录都要经过一次身份验证,可以说很麻烦。
解决方法就是Session,用户请求登陆时,身份验证成功后,服务器生成一条包含用户身份的记录,然后把该记录ID发给客户端,保存在cookie里。下次再次访问时,携带这条cookie,服务端验证cookie携带信息,如果能查询到ID对应记录,则验证通过,返回请求信息。
主要过程:

  1. 用户向服务器发送用户名和密码。
  2. 服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
  3. 服务器向用户返回一个 session_id,写入用户的 Cookie。
  4. 户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。
  5. 服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。

存在问题:session要存储在后台,需要定期清理,而且多网站session共享没法实现。
token就应运而生,它不需要再服务端存储信息。

二、今生token

使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

  1. 客户端使用用户名跟密码请求登录
  2. 服务端收到请求,去验证用户名与密码 验证成功后,服务端会签发一个 Token,
  3. 再把这个 Token发送给客户端
  4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
  5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

Token结构解析-实现Json Web Token(JWT)

JWT分为三个部分:

Header (头部)
Payload (负载)也可以意译为数据,信息主要体
Signature(签名)
完整的JWT为三部分用.相连,就像Header.Payload.Signature,当然各部分数据都是经过操作后组合在一起。
Header:一个json对象,描述jwt的元数据,说明书(需要经过Base64URL编码)
token在线解析如下:

http://jwt.calebb.net/

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjIwMDkwOTEsInVzZXJuYW1lIjoidGVzdDQifQ.2o0R23wY8HgGSRcBotgjwu7IarTXJTmk0QB81KI8idQ
了解Token_第1张图片
payload:一个json对象,存放实际数据.
官方规定了7个官方字段,当然也可以自定义

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

实现

jeecg项目实现

private static String token() {
   
		//这里进行服务登录并获取Token
		CloseableHttpClient httpClient = HttpClientBuilder.create

你可能感兴趣的:(了解Token)