美文网首页
带你了解JWT

带你了解JWT

作者: 残冬十九 | 来源:发表于2020-04-01 21:19 被阅读0次

@TOC

什么是JWT

    JWT就是Json web token ,JWT是一种基于Json的开放标准(RFC 7519)。
    是为了在网络应用环境中传递而声明的标准
    定义了一种紧凑安全的JSON对象,且存在数字签名,是安全的
    是一种用于通信双方之间传递安全信息的简洁的、URL安全的表述性声明规范,经常用在跨域身份验证。

认证方式

在JWT之前,我们用过Sssion来进行认证,也使用过Token认证。那么这两种认证是怎么来实现的呢?

我们都是知道,在http协议是一种无状态的协议,所以当用户提供登录信息进行登录认证后,第二次在进行请求时,用户必须再次进行认证才行,因为http是无状态的,所以不知道用户的请求。

Session认证

所以为了知道用户的请求,我们必须在服务器存储一份用户的信息,这个用户信息在响应时会返回给浏览器,让其存入cookie中,下次请求带上,服务器就知道是那个用户的请求了,这就是session认证。
  
  每个用户在认证后,都会在服务端做一次记录,通常session都是保存在内存中,所以用户增加时,服务器的开销也意味着增大。
  
  而用户认证后,服务段做了记录,如果记录在内存中存储,就意味用户下次请求也必须在这台服务器上才可以拿到认证信息,如果在分布式应用中,会限制负载均衡,也就限制了应用的扩展能力。

   session认证流程

Token认证

token也是无状态的,他是再认证之后生成一份token,这份token保留字在用户手中,当用户需要认真的时候,将token给予服务器,服务器来验证这个tokn,来检查token是否合法。

token认证流程

JWT认证

JWT简述

客户端在认证后,服务器会生成带有签名的JWT数据,返回给客户端,客户端将JWT数据保留起来,在以后的请求中将JWT数据和请求内容一起发给服务器,服务器对JWT数据进行验证,验证不通过则不返回数据。JWT在服务端不会保存任何信息。服务容易扩展

JWT构成

JWT由三部分构成,它们之间用圆点(.)连接。分别是:

  • Header(头部)

  • Payload(载荷)

  • Signature(签证)

       第一部分我们称它为头部(header)
       第二部分我们称其为载荷(payload,类似货车上承载的货物)
       第三部分是签证(signature)
       因此标准格式就是: hhhhhh.pppppppp.ssssss
    

头部(Header)

头部是对JWT基本信息的描述。由两个经典部分组成,一个是类型,一个是签名算法(HMAC SHA256或者RSA等等)。
例如:

{
'alg': "HS256",
'typ': "JWT"
}

然后将头部的Json进行base64加密(该加密是可以对称解密的),构成了第一部分.

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 (加密后的值)

载荷(playload)

playload是JWT的第二部分,它存放了有效的信息,这些信息也是由三部分构成

  • 标准中注册的声明
  • 公共的声明
  • 私有的声明
标准中注册的声明 (建议但不强制使用)
  • iss: jwt签发者
  • sub: jwt所面向的用户
  • aud: 接收jwt的一方
  • exp: jwt的过期时间,这个过期时间必须要大于签发时间
  • nbf: 定义在什么时间之前,该jwt都是不可用的.
  • iat: jwt的签发时间
  • jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
公共的声明

公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密.

私有的声明

私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。

playload例如:

{
"sub": '123456789',
"name": 'test',
"admin":true
}

然后将其进行base64加密,得到Jwt的第二部分。

  eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9

签证(signature)

JWT的第三部分是一个签证信息,信息由三个部分组成,header (base64后的),payload (base64后的),secret(盐值),为了得到签名部分,你必须有编码后的header、payload、盐值,header中指定的算法,然对它们签名即可。

JWT认证流程图

相关文章

  • 玩转 SpringBoot 2 之整合 JWT 上篇

    前言 该文主要带你了解什么是 JWT,以及JWT 定义和先关概念的介绍,并通过简单Demo 带你了解如何使用 Sp...

  • 带你了解JWT

    @TOC 什么是JWT 认证方式 在JWT之前,我们用过Sssion来进行认证,也使用过Token认证。那么这两种...

  • JWT的介绍解析

    JWT的介绍解析 一、什么是JWT?了解JWT,认知JWT 首先jwt其实是三个英语单词JSON Web Toke...

  • JWT 如何解码和获得令牌失效的日期

    如果你有一个 JWT 的字符串。 你在使用 JWT 的时候可能希望了解 JWT 这个令牌过期的时间。你可以对 JW...

  • 了解JSON Web令牌(JWT)

    了解JSON Web令牌(JWT) JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。今天...

  • JWT实现单点登录【项目实现】

    如果还不了解JWT的,可以看JWT实现单点登录【JWT介绍】 下面以实际项目中的应用分析首先看一下大致的数据流图:...

  • Asp.net WebAPI 使用JWT

    本文主要介绍在Asp.net API采用JWT对接口进行Token校验的教程 准备工作: 1 需要提前了解JWT生...

  • JWT(JSON Web令牌)

    jwt详情网址:https://jwt.io注:如果想深入了解可以进入该网站查看,以下内容将结合网上资源与个人理解...

  • JsonWebToken

    JWT (JsonWebToken) JWT官网['https://jwt.io/'] JWT简介 1.JWT(J...

  • rest-framework-jwt 学习记录

    主要是记录一下看了这个作者写的这篇 jwt用户认证 对jwt用了一个简单的了解http://lion1ou.wi...

网友评论

      本文标题:带你了解JWT

      本文链接:https://www.haomeiwen.com/subject/hbdzuhtx.html