JWT详解

本文介绍JWT组成原理及适用范围。

概览

JWT,全称JSON Web Token,是一种包含信息的Token,相较于普通的Token,唯一多的内容是:包含部分信息。与JWT相关的协议比较简单,但数量较多,本文只是对此加以总结。

术语说明

这其中会涉及到很多简写,先介绍一下

  • JWS:JSON Web Signature,表示使用基于JSON的数据结构,对内容进行数字签名或MAC。具体内容下文详述。
  • JWE:JSON Web Encryption,类似JWS,但这里是加密,而非数字签名。
  • JWK:JSON Web Key,以JSON的形式表示一个加密key。
  • JWA:JSON Web Algorithms,表示上面的签名、加密支持的算法。
  • JWT:JSON Web Token,使用JSON表示的Token形式,可以采用JWS或JWE进行签名或加密。
  • JOSE:JSON Object Signature and Encryption,即对上面JWS和JWE的统称。标准中常提到JOSE Header,代表的是JWS的Header或JWE的Header。

JWS

组成

JWS包含三部分

  • 头部(JOSE Header),即一些键值对

    • typ:type,即这一整个JWS代表的类型,典型值为JWT

    • alg:algorithm,算法,当前JWS签名或加密所采用的算法,需要在JWA中存在才可以用

    • jku:JWK Set URL,存放公钥的地址,必须遵守JWK规范

    • jwk:JSON Web Key,用于签名的秘钥,以JSON的形式发放,详情参考JWK

    • kid:key id,即秘钥id,jwk可能返回多个密码,kid精确指定

    • x5系列:X.509证书相关,这里忽略

    • 其它

  • 载荷(JWS Payload),即主要的正文内容

  • 签名(JWS Signature),签名方式如下

    • 待签名内容:ASCII(BASE64URL(UTF8(JWS Protected Header)) || ’.’ || BASE64URL(JWS Payload))
    • 签名算法:头部alg字段指定的算法

两种序列化格式

  • 压缩方式:一种压缩的、URL安全的序列化方式

    最终输出格式如下,即三个部分除头部需额外处理外,其余均进行BASE64及URL编码,将结果通过点号连接起来。这也是我们最常见的JWT的形式。

    BASE64URL(UTF8(JWS Protected Header)) || ’.’ ||
    BASE64URL(JWS Payload) || ’.’ ||
    BASE64URL(JWS Signature)
    
  • JSON方式:序列化结果就是一个JSON,签名等用字段表示

    最终输出格式如下,这种格式不常见,我们仅作了解就好

    {
         
      "protected": BASE64URL(UTF8(JWS Protected Header)),
      "header": "<不受
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值