工业数据管理及协同云服务-开发概述:JWT的组成

时间:2024-01-02 17:24:13

JWT的组成

图1 Json web token

一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。形式为:

A.B.C

样本数据如下:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJhdWQiOlsiZGVmYXVsdCIsImdhdGV3YXkiXSwiYXBwSWQiOiJkZWZhdWx0IiwiaXNzIjoiZGVmYXVsdCIsImV4cCI6MTU0NDY5MDY0NywiaWF0IjoxNTQ0Njg4ODQ3fQ.J-ngHZy8009k-OAQ7-6Jt2kUzsml6N60d-atVIP3UydsQH_GqFv4rSY_uliqZ2_8ecgcKm0pWAAFtN88t7ehVQ

头部( Header )

JWT需要一个头部,头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。

头部信息是经过BASE64 编码的,包括以下几个属性:

  • typ: token类型,固定,即JWT;
  • alg: 签名算法类型,如RSA;
  • kid: 密钥ID,由CraftArts IPDCenter颁发。

载荷(Payload)

载荷信息是经过BASE64编码解码后的JSON对象,包括以下几个属性:

  • iss:该JWT的签发者,当前使用 域名 填充;
  • sub:该JWT所面向的用户,当前使用系统应用Id;
  • aud:接收该JWT的一方,当前使用被调用系统应用Id;
  • exp(expires):什么时候过期,这里是一个Unix时间戳,默认5分钟;
  • iat(issued at):在什么时候签发的(UNIX时间);
  • nbf(Not Before):如果当前时间在nbf里的时间之前,则token不被接受;是否使用是可选的。

签名(Signature)

将上面的两个Base64编码后的字符串都用英文句号“.”连接在一起(头部在前),就形成了:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJhdWQiOlsiZGVmYXVsdCIsImdhdGV3YXkiXSwiYXBwSWQiOiJkZWZhdWx0IiwiaXNzIjoiZGVmYXVsdCIsImV4cCI6MTU0NDY5MDY0NywiaWF0IjoxNTQ0Njg4ODQ3fQ

最后,我们将上面拼接完的字符串用HS512算法进行加密。在加密的时候,我们还需要提供一个密钥(secret)。如果我们用mystar作为密钥的话,那么就可以得到我们加密后的内容:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJhdWQiOlsiZGVmYXVsdCIsImdhdGV3YXkiXSwiYXBwSWQiOiJkZWZhdWx0IiwiaXNzIjoiZGVmYXVsdCIsImV4cCI6MTU0NDY5MDY0NywiaWF0IjoxNTQ0Njg4ODQ3fQ.J-ngHZy8009k-OAQ7-6Jt2kUzsml6N60d-atVIP3UydsQH_GqFv4rSY_uliqZ2_8ecgcKm0pWAAFtN88t7ehVQ
support.huaweicloud.com/devg-ipdcenter/ipdcenter_08_0015.html