工业数据管理及协同云服务-开发概述:JWT的组成
JWT的组成
![点击放大](https://support.huaweicloud.com/devg-ipdcenter/zh-cn_image_0000001798351065.png)
一个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