什么是JWT?

JSON Web Token (JWT) 是一种开放标准 (RFC 7519) 定义了一种用于安全传输的紧凑、自包含(注:或自说明) 的Json结构, 被传输的信息可以通过JWT内容中的算法+密钥进行加密解密,来确保信息可信。JWT可以使用一个加密串 (使用HMAC 对称算法,或非对称算法RSAECDSA)

JWT用途

JWT主要用于两种场景:认证(Authorization)信息加密传递

JWT结构

JWT主要分为三部分:

  • Header
  • Payload
  • Signature

JWT形式为Header.Payload.Signature,三个部分都是json通过Base64加密而成,也就是说:JWT可以被任何人读取,只要使用Base64UrlENcode解密下就可以!(信息加密后边讲)

下面分别介绍这三部分内容与其组成:

Header内容

Header这部分包含令牌所用的算法(alg:algorithm, 常用的有HMAC SHA256或RSA)和 令牌的类型(typ: Token Type,JWT类型只能是"typ":"JWT")未被加密前的样子就像

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

Payload内容

Payload这部分包含token的信息,这部分可以包含 已被注册信息、公有的信息、私有的信息,提供了很多可以自定义的部分

官方给了一些推荐使用的已定义的参数名(已被注册信息):

  • "iss" (Issuer) Claim
  • "sub" (Subject) Claim
  • "aud" (Audience) Claim
  • "exp" (Expiration Time) Claim
  • "nbf" (Not Before) Claim
  • "iat" (Issued At) Claim
  • "jti" (JWT ID) Claim

官方的例子:

{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

公有的信息、私有的信息都是自定义的,注意不要与官方给的冲突即可,另外注意保持参数尽量少且不要暴露隐私数据

JWT的长度比较长,如果保存JWT到cookie中,可能会突破cookie的4k存储限制,所以需要保持参数尽量少

Signature内容

签名部分使用Header中定义的算法与信息传递方的密钥(公钥/私钥),把经过Base64Url加密的Header与Payload使用.连接在一起,进行加密得出签名。用来验证此JWT信息未被篡改

最后整体放在一起使用.连接在一起,它长这样:

下文预警

本文内容主要是为了引出下文使用JWT作为Spring Security OAuth2的token存储

JWT简要说明的更多相关文章

  1. ASP.NET Core 基于JWT的认证(二)

    ASP.NET Core 基于JWT的认证(二) 上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍,这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt在 .Net Core 上的实际运用 ...

  2. spring jwt springboot RESTful API认证方式

    RESTful API认证方式 一般来讲,对于RESTful API都会有认证(Authentication)和授权(Authorization)过程,保证API的安全性. Authenticatio ...

  3. SpringBoot系列 - 集成JWT实现接口权限认证

    会飞的污熊 2018-01-22 16173 阅读 spring jwt springboot RESTful API认证方式 一般来讲,对于RESTful API都会有认证(Authenticati ...

  4. Shiro+JWT+Spring Boot Restful简易教程

    序言 我也是半路出家的人,如果大家有什么好的意见或批评,请务必issue下. 项目地址:https://github.com/Smith-Cruise/Spring-Boot-Shiro . 如果想要 ...

  5. 不要使用 JWT 进行会话管理

    英文原文地址:Stop using JWT for sessions 最近我发现越来越多的人推荐使用 JWT 来在 Web 应用中管理会话(Session),这是一个非常非常糟糕的主意,在这篇文章中我 ...

  6. ASP.NET Core 2.2 : 二十七. JWT与用户授权(细化到Action)

    上一章分享了如何在ASP.NET Core中应用JWT进行用户认证以及Token的刷新,本章继续进行下一步,用户授权.涉及到的例子也以上一章的为基础.(ASP.NET Core 系列目录) 一.概述 ...

  7. Dubbo学习系列之九(Shiro+JWT权限管理)

    村长让小王给村里各系统来一套SSO方案做整合,隔壁的陈家村流行使用Session+认证中心方法,但小王想尝试点新鲜的,于是想到了JWT方案,那JWT是啥呢?JavaWebToken简称JWT,就是一个 ...

  8. 使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)——第1部分

    原文:使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)--第1部分 原文链接:https://www.codeproject.com/Articles/5160941/ASP- ...

  9. drf中的jwt使用与手动签发token、校验用户

    jwt认证 1)session存储token,需要数据库参与,耗服务器资源.低效2)缓存存token,需要缓存参与,高效,不易集群3)客户端存token,服务器存签发与交易token的算法,高效,易集 ...

随机推荐

  1. 用redis-dump工具对redis集群所有数据进行导出导入

    安装redis-dump redis-dump是基于ruby开发,需要ruby环境,而且新版本的redis-dump要求2.2.2以上的ruby版本,centos中yum只能安装2.0版本的ruby. ...

  2. Java生鲜电商平台-App系统架构开发与设计

    Java生鲜电商平台-App系统架构开发与设计 说明:阅读此文,你可以学习到以下的技术分享 1.Java生鲜电商平台-App架构设计经验谈:接口的设计2.Java生鲜电商平台-App架构设计经验谈:技 ...

  3. nRF24L01+如何检测信道被占用-RSSI寄存器实战分享

    检测信道占用的需求场景 在使用nRF24L01模块做一对多或多对一的组网通信中,大家都会担心一个问题就是在发送的时候,希望不要有其他的模块也进行发送,因为这样就会使无线信号发生碰撞,信道被堵塞,造成通 ...

  4. [b0040] python 归纳 (二五)_多进程数据共享和同步_信号量Semaphore

    # -*- coding: utf-8 -*- """ 多进程同步 使用信号量 multiprocessing.Semaphore 逻辑: 启动5个进程,打印,每个各自睡 ...

  5. 【微信小程序】安装EsayWechat简化微信小程序的开发

    1.安装easywechat composer require "overtrue/laravel-wechat" 2.文档 EasyWhchat官方文档

  6. Oracle 12c报错:ORA-01078和LRM-00109的解决办法

    Oracle 12c报错:ORA-01078和LRM-00109的解决办法 2017-12-17 10:25:30 lemon_love1 阅读数 4336  收藏 更多 分类专栏: oracle   ...

  7. Oracle EBS如何查找到说明性弹性域Title

    Oracle EBS如何查找到说明性弹性域Title 一.方法一:直接在弹性栏位界面查询 在EBS中,有部分表已经启用说明性弹性域,我们可以直接在界面得到弹性域对话框的标题,如下图所示,在OM-事务处 ...

  8. dockerfile和资源限制(五)

    镜像生成途径 dockerfile 基于容器制作 什么是dockerfile dockerfile说白就是用来构建docker 镜像的源码,大家看到源码俩字不用惊慌,所为的dockerfile源码只是 ...

  9. greenlet实现协程

    #greenlet 1 import time from greenlet import greenlet # greenlet可以实现一个自行调度的微线程 def work1(): while Tr ...

  10. pyspark 使用时环境设置

    在脚本中导入pyspark的流程 import os import sys spark_name = os.environ.get('SPARK_HOME',None) # SPARK_HOME即sp ...