面: 简历中有看你写使用过JWT,那你来谈谈JWT的三个组成部分

jwt的组成部分分为头部,载荷和签名

头部一般需要表面令牌的类型,以及使用的签名算法,一般使用HS256的签名算法

对于载荷部分,一般是claims声明类型,里面一般是存放在创建的时间戳,结束的时间戳以及可能要存放的用户名密码之类的东西

有效载荷的七个默认字段

iss:发行人
exp:到期时间
sub:主题
aud:用户
nbf:在此之前不可用
iat:发布时间
jti:JWT ID用于标识该JWT

之后就是签名部分,签名使用前面的头部和载荷两部分对于我给出的秘钥secretKey进行签名得到结果

一般的格式为xxxxx.yyyyy.zzzzz,分别对应头部,载荷,签名,在服务端生成之后,发送给客户端,zzzz那个部分是加密过后的字符串,一般服务器验证就是拿xxxx.yyy加一次密看看和不和zzz相同

### JWT Token 的组成结构 JSON Web Token (JWT) 是一种开放标准 (RFC 7519),用于在网络应用环境间安全地传输信息。JWT Token 主要由 **Header**、**Payload** 和 **Signature** 这三个部分组成,它们之间通过点号 (`.`) 分隔。 #### Header(头部) Header 部分通常包含两部分内容:令牌的类型(即 `JWT`),以及所使用的签名算法(如 HMAC SHA256 或 RSA)。这部分会被编码成 Base64Url 格式[^4]。 例如: ```json { "alg": "HS256", "typ": "JWT" } ``` #### Payload(负载) Payload 是 JWT 的主体内容部分,包含了声明(Claims)。这些声明可以传达关于实体(通常是用户)和其他数据的信息。声明分为三种类型:注册声明(Registered claims)、公共声明(Public claims)和私有声明(Private claims)。同样,这一部分也会被编码为 Base64Url 格式。 一个典型的 Payload 可能如下所示: ```json { "sub": "1234567890", // 主体(Subject) "name": "John Doe", // 姓名 "iat": 1516239022 // 发行时间(Issued At Time) } ``` #### Signature(签名) 为了验证消息是否被篡改,以及确保消息来自可信任的一方,JWT 使用签名来保护其完整性。签名是由编码后的 Header 和 Payload 数据,加上一个密钥,再通过指定的算法计算得出的结果。 签名的生成过程可以用以下伪代码描述: ```plaintext HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) ``` 最终,完整的 JWT 将呈现为这样的形式: ```plaintext <base64url-encoded-header>.<base64url-encoded-payload>.<signature> ``` 以下是 Python 中生成 JWT 的简单示例: ```python import jwt header = {"alg": "HS256", "typ": "JWT"} payload = { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } secret_key = "my_secret_key" token = jwt.encode(payload, secret_key, algorithm="HS256", headers=header) print(token) decoded_token = jwt.decode(token, secret_key, algorithms=["HS256"]) print(decoded_token) ``` 上述代码展示了如何利用 PyJWT 库创建并解码一个 JWT Token。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值