JWT

简介:  JWT是JSON Web Token 的简写,Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密

一.介绍


  

JWT是JSON Web Token 的简写,Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密


二.为什么要用JWT


随着互联网技术的不断革新以及人们使用互联网的频率越来越高,网站人数日趋增长,这样给服务器带来了巨大的压力,在传统的互联网架构中,使用session(会话)来作为标识用户的凭证,当用户登录系统后,一般将用户的账号,角色等信息存在session会话中,然后返回客户端,将session存在客户端的Cookie中,这样用户再次请求的时候就带上Cookie里的session_id,与之前的校验,但是这样有很大的弊端,我们知道session它存在服务器端(试想一下如果百万上千万的session同时存在于服务器,那服务器所承受的压力是很大的,当然,没有那个公司到达这个规模还用session,这东西过时了),使用session的弊端还在于它无法满足分布式系统的需求,当然也可以通过Redis这种缓存技术对分布式session进行管理,但是这样工作量比较大,如果持久层挂了,那么单点登录就失败,所有就引入了JWT


三.JWT原理

  

服务器认证以后,生成一个 JSON 对象,发回给用户,此后每次请求都会再请求头带上它,类似下图


{
          " 用户名":"steak"
           "角色" :"管理员"
           "到期时间":"2019.12.2"          
}


用JWT认证后,服务端就变成无状态了,更加容易扩展(分布式)

 

四.JWT的组成部分


  1.Header:头部


  2.payload:负载


  3.Signature:签名


    三部分连起来就类似这个样子


 

Header 部分是一个 JSON 对象,描述 JWT 的元数据,通常是下面的样子。


{
  "alg": "HS256", //签名算法
  "typ": "JWT"  //令牌(token)的类型
}

 

Payload 部分也是一个 JSON 对象,用来存放实际需要传递的数据。JWT 规定了7个官方字段,也可以自定义字段


iss (issuer):签发人
  exp (expiration time):过期时间
  sub (subject):主题
  aud (audience):受众
  nbf (Not Before):生效时间
  iat (Issued At):签发时间
  jti (JWT ID):编号
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}


Signature 部分是对Header,payload两部分的签名,防止数据篡改,需要指定一个密钥(secret),这个密钥只有服务器才知道,不能泄露给用户,然后,使用 Header 里面指定的签名算法(默认是 HMAC SHA256),按照下面的公式产生签名。


HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  your-256-bit-secret
) 

 

Header和payload都是使用Base64URL进行加密


四.使用

  

当用户登录后,会将用户的信息进行加密,然后返回客户端一个加密后的字符串,可以存储在客户端的Cookie里,此后每一次请求都会带上它(放在请求头),如果此字符串和服务端的一致,则认证成功,否则失败


最好放在请求头里面,否则跨域带不过去,


五.代码地址


代码地址:https://gitee.com/steakliu/jwt.git
目录
相关文章
|
8天前
|
存储 JSON 安全
JWT 还能这样的去理解嘛??
JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的。JWT 自身包含了身份验证所需要的所有信息,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。可以看出,。并且, 使用 JWT 认证可以攻击,因为 JWT 一般是存在在中,使用 JWT 进行身份验证的过程中是的。
185 1
|
8天前
|
JSON 算法 数据库
|
8天前
|
前端开发 数据安全/隐私保护
JWT令牌
JWT令牌
17 0
|
6月前
|
前端开发
什么是JWT?深入理解JWT从原理到应用(下)
什么是JWT?深入理解JWT从原理到应用(下)
44 0
|
8天前
|
JSON 算法 数据库
JWT
JWT
50 0
|
8天前
|
存储 JSON 算法
什么是JWT?
什么是JWT?
39 0
|
8天前
|
存储 JSON 算法
快速了解什么是jwt及如何使用jwt
快速了解什么是jwt及如何使用jwt
84 0
|
5月前
|
存储 JSON 安全
了解什么是JWT
了解什么是JWT
28 0
|
5月前
|
JSON 数据格式
jwt->jwt简介,jwt工具类,jwt集进成spa项目
jwt->jwt简介,jwt工具类,jwt集进成spa项目
46 0
|
6月前
|
JSON 算法 前端开发
什么是JWT?深入理解JWT从原理到应用(上)
什么是JWT?深入理解JWT从原理到应用(上)
409 0

热门文章

最新文章