原文收录

GitBook——统一接口认证解决方案

JsonWebToken

关于JsonWebToken的专业名词解释:

  • unsecured JWT:默认头部{“alg”: “none”}的jwt令牌
  • JWS(SignedJWT):已签名的jwt,包含标准jwt结构:header、payload、signature
  • JWE(EncryptedJWT):已加密的jwt,结构为:
  • JWA:所涉及的密码学算法
  • JWK:密码学算法所需的密钥

JsonWebToken主体分为三个部分:header、payload、signature

unsecured JWT结果示例:

eyJhbGciOiJub25lIn0.
eyJqdGkiOiJkZWJhNzhiZDZiNTI0ZTA2OWE4MmZjZTJlNzdmOTU2MSIsImlzcyI6Ik1hdGVNYXN0ZXIiLCJzdWIiOiLmnInmlYjotJ_ovb3mtYvor5UiLCJhdWQiOiJhdWRpZW5jZSIsImV4cCI6MTY3MDExNzIzMywibmJmIjoxNjcwMDMwODkzLCJpYXQiOjE2NzAwMzA4MzN9.
  • header
{"alg": "HS256","typ": "JWT","cty": ""
}

  • payload
    有效负载一般分为两类:用户自定义、标准注册负载(iss、sub、aud、exp、nbf、iat、jti)
{"jti": "4a9813f957b84dda8091510402e7c33d","iss": "MateMaster","sub": "有效负载测试","aud": "audience","exp": 1670054958,"nbf": 1669968618,"iat": 1669968558
}

JWS

JWS(Signed JWT)compact序列化主要生成流程:

结果示例

eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.
eyJpc3MiOiJtYXRlbWFzdGVyIiwic3ViIjoiandzIiwiYXVkIjoiYXVkaWVuY2UiLCJleHAiOjE2NzAwMzQ4NjEsImlhdCI6MTY3MDAzNDgwMSwibmJmIjoxNjcwMDM0ODAxLCJqdGkiOiIzNTA3M2FhYmMxMmU0ZDUzOTBkNGNjOGFlYzVhNmVlYyJ9.
pKhj-QPDszduhet_SZW6BfsLX0n88D__YvIHvfj87OSitCRq1ybb7Bc3ClZZfhf_ewgrhVUL4d4WK0JuCkl0gA

难点:

  • 什么是JWS JSON Serialization?
  • JWS header claims的各个参数(除标准jwt之外的参数)作用?

JWS JSON序列化
JWS JSON 序列化形式(多个签名)

{"payload": "eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ","signatures": [{"protected": "eyJhbGciOiJSUzI1NiJ9","header": {"kid": "2010-12-29"},"signature": "cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZmh7AA uHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYNX4BAyn RFdiuB--f_nZLgrnbyTyWzO5vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K0GarZRmB _eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqvhJ1phCnvWh6 IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AXLIhWkWywlVmtVrBp0igcN_IoypGlU PQGe77Rw"},{"protected": "eyJhbGciOiJFUzI1NiJ9","header": {"kid": "e9bc097a-ce51-4036-9562-d2ade882db0d"},"signature": "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDx w5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q"}]
}

扁平化JWS JSON 序列化形式(单个签名)

{"payload": "eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQog Imh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ","protected": "eyJhbGciOiJFUzI1NiJ9","header": {"kid": "e9bc097a-ce51-4036-9562-d2ade882db0d"},"signature": "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFC gfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q"
}

JSON 序列化与 compact序列化的区别:

  1. Json序列化结果为标准的json格式对象包含:payload、signatures 而compact序列化结果为 header.payload.signature
  2. json序列化支持两种header:protected和unprotected,compact只支持protected。ps:protected与unprotected代表这个header是否被签名验证
  3. json序列化支持多个签名,每个签名内容包含在signatures数组

JWS JSON字段含义
payload:base64编码的JWT负载字符串
protected:base64编码的JWS头部字符串,包含的声明受到签名保护
signatures:签名数组,header:不受签名保护的header,在unprotected header中是必须的,在protected中是可选的,signature:base64编码的JWS签名字符串


重点知识:
在JWS中,Share SecretKey,各方都可以验证和生成令牌。在公钥/私钥中,只有私钥可以验证、生成令牌,公钥只可以验证令牌,不能用于生成令牌
从生产者与消费者角度理解JWS

JWE

JWE(Encrypted JWT)compact序列化主要生成流程:

  1. 根据alg声明算法,生成所需的随机数
  2. 依据密钥管理方式确定CEK
  3. 依据密钥管理方式确定JWE Encrypt Key
  4. 计算初始化向量(如果需要)
  5. 压缩文本内容(如果需要)
  6. 使用CEK、IV或AAD加密数据

JWE(Encrypted JWT)compact序列化组成部分:

base64(header)
base64(encryptedKey) [step 2,3]
base64(initializationVector) [step 4]
base64(cipherText) [step 6]
base64(authenticationTag) [step 6]

eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.
Y2DxdVnvuDwo5vutvvPg4PpGQKFmRxWoDUCtfs58Gv5rJ4J1RkSOUQ.
-Iu2VusgO_w0uWrn0JWx3Q.
krW8miBqh5x3dZ6ktf0C_A.
HHYK0TxHth2949NDPpwTsw

重点知识:
在JWE中,Share SecretKey,各方都可以加密解密令牌。在对称加密中,只有公钥可以加密数据,私钥解密
从生产者与消费者角度理解JWE

JWK

JWK的出现旨在,为不同加密密钥提供一个统一的格式标准
JWK样例

{"kty": "EC","crv": "P-256","x": "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4","y": "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM","d": "870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE","use": "enc","kid": "1"
}

持续更新中…………

一文理解 JWT、JWS、JWE、JWA、JWK、JOSE相关推荐

  1. JWT JWS JWE三者区别

    JWT & JWS & JWE JWT : Json Web Token Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准( ...

  2. JWT JWS JWE

    Json Web Token(JWT) JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在两个组织之间传递安全可靠的信息. 现在网上大多数介绍JWT的文章实际介绍 ...

  3. 一文读懂JWT,JWS,JWE

    点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:zh_coder https://blog.csdn.net/hellowordap ...

  4. 【JWT】JWT JWS JWE | 在线JWS解析工具

    JWT.JWS.JWE 主要参考: https://www.51cto.com/article/630971.html 辅助参考: https://www.jianshu.com/p/50ade6f2 ...

  5. JJWT:JWS, JWE, JWK, JWA, JWT

    JWS, JWE, JWK, JWA, JWT JWS:JSON Web Signature,Digital signature/HMAC specification(签名) JWE:JSON Web ...

  6. 一篇文章带你分清楚JWT,JWS与JWE

    随着移动互联网的兴起,传统基于session/cookie的web网站认证方式转变为了基于OAuth2等开放授权协议的单点登录模式(SSO),相应的基于服务器session+浏览器cookie的Aut ...

  7. java jwe/jws_一篇文章带你分清楚JWT,JWS与JWE

    随着移动互联网的兴起,传统基于session/cookie的web网站认证方式转变为了基于OAuth2等开放授权协议的单点登录模式(SSO),相应的基于服务器session+浏览器cookie的Aut ...

  8. JWT,JWS与JWE区别

    JWT,JWS与JWE区别 原文:https://www.jianshu.com/p/50ade6f2e4fd 随着移动互联网的兴起,传统基于session/cookie的web网站认证方式转变为了基 ...

  9. 一文理解CatBoost!

    1. CatBoost简介 CatBoost是俄罗斯的搜索巨头Yandex在2017年开源的机器学习库,是Boosting族算法的一种.CatBoost和XGBoost.LightGBM并称为GBDT ...

最新文章

  1. squid 使用 笔记
  2. 剑指offer系列之十:二进制中1的个数
  3. JAVA编码规约(阿里)
  4. 【ABAP】 汇票收款自动过账FM
  5. 快速排序(过程图解 参考啊哈算法)
  6. Struts2之初识
  7. 2019西电网安实验班选拔考试
  8. 好久以来,就想为你写一首诗
  9. ssh 隧道 mysql_利用SSH隧道方式连接远程MySQL服务器
  10. D - Send a Table (UVA - 10820)
  11. 使用管理员权限运行的程序无法浏览网络驱动器的问题
  12. 个人作业week7——前端开发感想总结
  13. stm32设备描述符请求失败_我爱OS第21讲:实战篇:IO设备
  14. 使用yarn dev报错 vue-cli-service外部命令
  15. 晶振波形不是正弦波_求助各位!有源晶振出来的波形是方波还是正弦波?
  16. Sleepy Kaguya (回归之战)
  17. Java 数字转中文数字(会计格式与非会计格式,暂不包含小数)
  18. Swing + MySQL实现汽车租赁系统4.0
  19. ZT自老罗的博客 Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析...
  20. 人大金仓国产化数据库适配

热门文章

  1. Cython 图片去除水印
  2. elasticsearch简单使用和ELK的集成
  3. JAVA毕业设计课设源码分享50+例
  4. 教你如何用Python抓取QQ音乐歌单及分析
  5. CSS,font-family,好看常用的中文字体
  6. 计算机无法检测到键盘,电脑无法识别键盘
  7. 转:企业最稀缺和最具价值的人力资源到底是什么?
  8. 2017计算机考研参考书目推荐,2017年中山大学085211计算机技术考研参考书目推荐...
  9. MATLAB解线性方程组
  10. 2020-12-26 工作常用 Linux 操作:磁盘卸载、 自动化挂盘脚本 、磁盘分区合并、ansible、git 设置相关