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,一经查实,立即删除!

相关文章

DOM操作2

一、API和WebAPI API就是接口,就是通道,负责一个程序和其他软件的沟通,本质是预先定义的函数。Web API是网络应用程序接口。包含了广泛的功能,网络应用通过API接口,可以实现存储服务、消息服务、计算服务等能力&#x…

浮动布局demo

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>浮动布局</title><style type"text/css">*{margin: 0;padding: 0;}header{height: 150px;background: yellow;}nav{height: 30px;background: green;…

UI行业发展预测 系列规划的调整

我又双叒叕拖更了&#xff0c;上一篇还是1月22号更新的&#xff0c;这都3月9号了……前面几期把职业规划、能力分析、几个分析用的设计理论都写完了&#xff0c;当然实际工作中用到的方法论不止上面这些&#xff0c;后续会接着学习&#xff1b;如果你的目标是一线团队&#xff…

出现Press ENTER or type command to continue的原因

cd 然后 vim .vimrc 写入 set nu 保存 退出转载于:https://www.cnblogs.com/520qtf/p/8968441.html

基于Flask实现后台权限管理系统 - 导言

网上有这样一个段子&#xff0c;在评论语言好坏的时候&#xff0c;都会有人评论说PHP是世界上最好的语言&#xff0c;人生苦短我用Python&#xff0c;这里姑且不去评论语言的好坏&#xff0c;每一个语言存在都有它的价值&#xff0c;譬如C语言适合底层开发&#xff0c;整个Linu…

5-1 unittest框架使用

unittest是python的一个单元测试框架&#xff0c;内置的&#xff0c;不需要pip install 什么什么的。直接在py文件里面调用 import unittest。 他这个框架是怎么回事呢&#xff0c;他可以对数据初始化&#xff0c;然后执行测试&#xff08;里面有断言功能就是判断返回是否正确…

bzoj 4573: [Zjoi2016]大森林

Description 小Y家里有一个大森林&#xff0c;里面有n棵树&#xff0c;编号从1到n。一开始这些树都只是树苗&#xff0c;只有一个节点&#xff0c;标号为1。这些树 都有一个特殊的节点&#xff0c;我们称之为生长节点&#xff0c;这些节点有生长出子节点的能力。小Y掌握了一种魔…

Unity3D在C#编程中的一些命名空间的引用及说明

System包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、属性和处理异常的基础类和基类。其他类提供支持下列操作的服务&#xff1a;数据类型转换&#xff0c;方法参数操作&#xff0c;数学计算&#xff0c;远程和本地程序调用&#xff0c;应用程序环境管理以及对…

docker入门简介

简介docker(容器技术)是实现虚拟化技术的一种方案,通过利用linux中命名空间,控制组和联合文件系统这个三个主要技术,来实现应用程序空间的隔离.通过对应用程序运行环境的封装来生成镜像并部署来实现跨平台,一定程度上加快了服务交付的整体流程.这篇文章主要介绍docker的一些基本…

Highcharts 配置选项详细说明

http://www.runoob.com/highcharts/highcharts-setting-detail.html 转载于:https://www.cnblogs.com/mengfangui/p/8969121.html

linux下的启停脚本

linux下的根据项目名称&#xff0c;进行进程的启停脚本 #!/bin/bashJAVA/usr/bin/java APP_HOME/opt/program/qa/wechat APP_NAMEprogramname.jar APP_PARAM"--spring.config.location${APP_HOME}/application.properties --logging.path${APP_HOME}"case $1 in star…

python 网页爬取数据生成文字云图

1. 需要的三个包&#xff1a; from wordcloud import WordCloud #词云库 import matplotlib.pyplot as plt #数学绘图库 import jieba; 2. 定义变量&#xff08;将对于的变量到一个全局的文件中&#xff09;&#xff1a; import re; pdurl_firsthttps://movie.do…

python---重点(设计模式)

前戏&#xff1a;设计模式简介 设计模式是面向对象设计的解决方案&#xff0c;是复用性程序设计的经验总结。&#xff08;与语言无关&#xff0c;任何语言都可以实现设计模式&#xff09; 设计模式根据使用目的的不同而分为创建型模式&#xff08;Creational Pattern&#xff0…

洛谷 题解 P2010 【回文日期】

因为有8个字符&#xff0c;所以可得出每一年只有一个回文日期。 因此只要判断每一年就行了。 做法&#xff1a; 我们先把年倒过来&#xff0c;例如2018年就倒为8102&#xff0c;就得出8102就是回文日期的后四个字符&#xff0c;我们只要判断一下有没有这个月份和这个日期。 具体…

线程相关

1、启动线程1.11 new Handler()形式new Handler(mContext.getMainLooper()).post(newOnekeyBindFrameActivity.NetworkThread());1.12new Handler().postDelayed(new StatusCheckLoginBindFrameThread(), IoTCultivatePlantConfig.START_ACTIVITY_POST_DELAYED);1.2 new Thread…

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

最近在学习Oracle的统计信息这一块&#xff0c;收集统计信息的方法如下&#xff1a; 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&#xff08;axis0 与axis1&#xff09;区分 转载于:https://www.cnblogs.com/greatljg/p/10802392.html

Python Web开发:开发wsgi中间件

本文参考了&#xff1a; github.com/alanctkc/ws…Youtube : Creating WSGI Middleware上篇文章简要提到&#xff1a;wsgi 规范中的 app 是一个可调用对象&#xff0c;可以通过嵌套调用的方式实现中间件的功能。这篇文章就来亲自动手实现一下。 此文的重点在于 app 端&#xff…

20165320 第九周学习总结

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

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

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