JWT协议学习笔记

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

官方 https://jwt.io

英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519

中文翻译 https://www.jianshu.com/p/10f5161dd9df

 

1. 概述

JSON Web Token(JWT)是一种紧凑的、URL安全的方法用来表示

在两个部分之间的传输声明. 通常由2种实现: JWS=JSON Web Signature,JWE=JSON Web Encryption。实际上JWT包含了一个大家族。

https://tools.ietf.org/html/rfc7515 = JWS

https://tools.ietf.org/html/rfc7516 =JWE

https://tools.ietf.org/html/rfc7517 = JWK

https://tools.ietf.org/html/rfc7518 = JWA

https://tools.ietf.org/html/rfc7519 = JWT

https://tools.ietf.org/html/rfc7520 =JOSE

 

2.定义

JWS

 

JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures.

JSON Web Signature (JWS)表示使用基于JSON的数据结构用数字签名或消息身份验证代码(MACS)保护的内容。

JWE

JSON Web Encryption (JWE) represents encrypted content using JSON-based data structures.

JSON Web Encryption(JWE)表示基于JSON数据结构的加密内容。

JWK

A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key.

JSON Web Key(JWK)是一个表示加密密钥的JSON数据结构。

JWA

This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications.

本规范注册了密码算法和标识符。用于JSON Web签名(JWS)、JSON Web加密

(JWE)和json web key(JWK)规范。

 

仔细扣字眼去理解以上文绉绉的定义,可以发现 JW(*)家族并不是同级关系。

举个不是很恰当的例子:

一个json:

{"action":"8点进攻"},

对这个json做数字签名,用然后用 内容 || "." || 签名 的格式包装

{"action":"8点进攻"}.eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9

这个就是JWS

 

对这个json

{"action":"8点进攻"}

{"action":"8点进攻"}.eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9

加密,形成

05kLzcSr4qKAq7YN7e9jwQRb23

这个就是JWE.

 

以上例子说明JSE和JSW的核心区别是一个签名(数据没有被篡改,来源是真实),一个加密(明文无法被第三者知晓)。一般把JSE作为多JWT的实现用来做网站的请求验证。

 

 

3.结构

 

 

格式

例子,注意标点 . 的存在

JWS

BASE64URL(UTF8(JWS Protected Header)) || '.' ||

BASE64URL(JWS Payload) || '.' ||

BASE64URL(JWS Signature)

eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9

.

eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ

.

dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk

JWE

BASE64URL(UTF8(JWE Protected Header)) || '.' ||

BASE64URL(JWE Encrypted Key) || '.' ||

BASE64URL(JWE Initialization Vector) || '.' ||

BASE64URL(JWE Ciphertext) || '.' ||

BASE64URL(JWE Authentication Tag)

eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ.

OKOawDo13gRp2ojaHV7LFpZcgV7T6DVZKTyKOMTYUmKoTCVJRgckCL9kiMT03JGe

ipsEdY3mx_etLbbWSrFr05kLzcSr4qKAq7YN7e9jwQRb23nfa6c9d-StnImGyFDb

Sv04uVuxIp5Zms1gNxKKK2Da14B8S4rzVRltdYwam_lDp5XnZAYpQdb76FdIKLaV

mqgfwX7XWRxv2322i-vDxRfqNzo_tETKzpVLzfiwQyeyPGLBIO56YJ7eObdv0je8

1860ppamavo35UgoRdbYaBcoh9QcfylQr66oc6vFWXRcZ_ZT2LawVCWTIy3brGPi

6UklfCpIMfIjf7iGdXKHzg.

48V1_ALb6US04U3b.

5eym8TW_c8SuK0ltJ3rpYIzOeDQz7TALvtu6UG9oMo4vpzs9tX_EFShS8iB7j6ji

SdiwkIr3ajwQzaBtQD_A.

XFBoMYUZodetZdvTiFvSkQ

JWK

 

{"kty":"EC",

"crv":"P-256",

"x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",

"y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",

"kid":"Public key used in JWS spec Appendix A.3 example"

}

转载于:https://my.oschina.net/u/2382040/blog/3042605

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

验证Oracle收集统计信息参数granularity数据分析的力度

最近在学习Oracle的统计信息这一块,收集统计信息的方法如下: DBMS_STATS.GATHER_TABLE_STATS (ownname VARCHAR2, ---所有者名字tabname VARCHAR2, ---表名partname VARCHAR2 DEFAULT NULL, ---要分析的分区名estimate_percent NUMBER DEFAULT NULL, …

Python之NumPy(axis=0 与axis=1)区分

Python之NumPy(axis0 与axis1)区分 转载于:https://www.cnblogs.com/greatljg/p/10802392.html

20165320 第九周学习总结

主要内容: 1.URL类 URL类是java.net包中的一个重要的类,使用URL创建对象的应用程序称为客户端程序。URL 的构造方法:try { URL url new URL ("http://www.google.com"); } catch (MalformedURLException e) {System.out.println(&…

Python 函数的执行流程-函数递归-匿名函数-生成器

1 函数的执行流程函数的执行需要对函数进行压栈的,什么是压栈呢,简而言之就是在函数执行时在栈中创建栈帧存放需要变量以及指针的意思。具体涉及的知识非常多,这里就已一个Python脚本简单进行分析。当我们运行上面代码时,它的执行…

【2】信息的表示和处理

1.现代计算机存储和处理的信息都以二值信号表示。 2.机器为什么要使用二进制进行存储和处理? 答:二值信号能够很容易的被表示、存储、传输。例如: 可以表示为穿孔卡片上有洞和无洞、导线上的高压和低压,顺逆时针的磁场。 3.大多数…

java版b2b2c社交电商spring cloud分布式微服务(二) 服务消费者(rest+ribbon)

一、ribbon简介 Ribbon is a client side load balancer which gives you a lot of control over the behaviour of HTTP and TCP clients. Feign already uses Ribbon, so if you are using FeignClient then this section also applies. —–摘自官网 ribbon是一个负载均衡客…

[学习笔记]支配树

被支配树支配的恐惧 定义 显然,这个支配关系是一个树(或者如果有的点不能从r到达,就是一个树一堆点)。 首先不会成环,其次也不会是DAG 即如果A支配C,B支配C,那么A和B之间必然有支配关系 解法 首…

RBAC 权限设计(转载)

来源 :https://blog.csdn.net/rocher88/article/details/43190743 这是我在网上找的一些设计比较好的RBAC权限管理不知道,像新浪、搜狐、网易、百度、阿里巴巴、淘宝网的RBAC用户权限这一块,都是这种细颗粒的RBAC设计开发,还是把他…

20172311 2017-2018-2 《程序设计与数据结构》第八周学习总结

20172311 2017-2018-2 《程序设计与数据结构》第八周学习总结 教材学习内容总结 本周对JAVA中的多态性进行了学习 多态性引用能够随时间变化指向不同类型的对象,是通过后绑定实现的。实现多态性的主要途径有两种: 1.由继承实现多态性 2.利用接口实现多态…

Linux系统安装Apache 2.4.6

http://www.cnblogs.com/kerrycode/p/3261101.html Apache简介 Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最…

lnmp化境开启pathinfo,支持tp5.0等访问

一、 开启pathinfo   #注释 下面这一行 #include enable-php.conf #载入新的配置文件 include enable-php-pathinfo.conf #添加如下location / {if (!-e $request_filename){rewrite ^/(.*)$ /index.php/$1 last;break;}}location ~ /index.php {fastcgi_pass 127.0.0.1:…

openfire(一):使用idea编译openfire4.2.3源码

最近公司项目要使用openfire,并对源码做一些修改,使用的openfire版本为官网目前最新版本4.2.3,网上资料较少,踩了很多坑,特此记录。 1.下载源码 http://www.igniterealtime.org/downloads/source.jsp 2.使用idea导入源…

[BZOJ] 1688: [Usaco2005 Open]Disease Manangement 疾病管理

1688: [Usaco2005 Open]Disease Manangement 疾病管理 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 727 Solved: 468[Submit][Status][Discuss]Description Alas! A set of D (1 < D < 15) diseases (numbered 1..D) is running through the farm. Farmer John woul…

Image-to-Image Translation with conditional Adversarial Networks ---- Pix-2-Pix

任务场景 Photos to semantic segmentationCityscapes labels to photosColorizationFacades labels to photoDay to nightThe edges to photoAnd so on.在生成器模型中&#xff0c;条件变量y实际上是作为一个额外的输入层&#xff08;additional input layer&#xff09;&…

5分钟从零构建第一个 Apache Flink 应用

为什么80%的码农都做不了架构师&#xff1f;>>> 在本文中&#xff0c;我们将从零开始&#xff0c;教您如何构建第一个Apache Flink &#xff08;以下简称Flink&#xff09;应用程序。 开发环境准备 Flink 可以运行在 Linux, Max OS X, 或者是 Windows 上。为了开发…

Android6.0------权限申请RxPermissions

前面写了Android6.0权限介绍和权限单个&#xff0c;多个申请&#xff0c;用的是纯Java代码&#xff0c;本文主要说的是借助第三方库来实现权限申请。 借助第三方库 RxPermissions来申请6.0权限。 RxPermissions库地址&#xff1a;https://github.com/tbruyelle/RxPermissions …

博客作业04--树

1.学习总结(2分) 1.1树结构思维导图 1.2 树结构学习体会 树这一章节比较复杂&#xff0c;知识点繁多&#xff0c;结合了递归的知识所以代码阅读起来会有障碍&#xff0c;难以理解&#xff0c;所以学起来比较吃力&#xff0c;而且很多经典的算法理解的不是很透彻解决pta上的问题…

[DP/单调队列]BZOJ 2059 [Usaco2010 Nov]Buying Feed 购买饲料

首先我想吐槽的是题目并没有表明数据范围。。。 这个题目 DP方程并不难表示。 dp[i][j]表示前i个地点携带了j个货物的最小花费 dp[i][j] dp[i-1][k] (j-k) * cost j*j*(leng[i]-leng[i-1]) 如果你这样直接提交上去&#xff0c;恭喜你超时&#xff01;&#xff01;&#xff0…

039_MySQL_多表查询

#创建部门 CREATE TABLE IF NOT EXISTS dept (did int not null auto_increment PRIMARY KEY,dname VARCHAR(50) not null COMMENT 部门名称 )ENGINEINNODB DEFAULT charset utf8;#添加部门数据 INSERT INTO dept VALUES (1, 教学部); INSERT INTO dept VALUES (2, 销售部); IN…

4.navicat11激活教程,亲测可用哦!

原文地址&#xff1a;http://blog.csdn.net/sanbingyutuoniao123/article/details/52589678Navicat是一款数据库管理工具, 用于简化, 开发和管理MySQL, SQL Server, SQLite, Oracle 和 PostgreSQL 的数据库&#xff1b;Navicat数据模型工具以图形化方式创建关联式数据库&#x…