JWT的Payload部分通常包含哪些内容?

📅 发布时间:2026/8/29 13:03:54
JWT的Payload部分通常包含哪些内容? JWT的Payload部分我们可以把它想象成“通行证”里面的主要内容区域。这部分描述了通行证持有者的信息和他们所拥有的权限。Payload通常包含的内容注册声明Registered Claims这是一些预定义好的声明比如iss(发行人)、sub(主题)、aud(受众)、exp(过期时间)等。它们都是关于JWT的标准信息。公开声明Public Claims这些是JWT的创建者可以自定义的声明但是需要避免与注册声明冲突。私有声明Private Claims这些是创建者为了特定目的而自定义的声明比如用户的ID、角色等。底层原理Payload部分其实就是一个JSON对象它被编码但不是加密成Base64Url格式这样可以确保数据在网络中安全地传输而不会被特殊字符干扰。重要的是要知道虽然Payload被编码了但它不是加密的所以不应该包含敏感信息。通俗解释想象Payload部分就像你学生证里的信息栏上面有你的姓名、学号、班级等基本信息这些信息对于识别你的身份很重要但它们并不是秘密信息因为别人拿到你的学生证也能看到这些信息。JWT的Payload也是这样它包含了识别用户或请求所必需的信息但这些信息不是保密的。PHP实例代码下面是一个简单的PHP代码示例用于创建一个JWT并查看其Payload部分?php require vendor/autoload.php; // 引入JWT库假设你已经通过Composer安装了firebase/php-jwt use \Firebase\JWT\JWT; $key your_secret_key; // 用于签名JWT的密钥 $payload array( user_id 12345, // 自定义的用户ID username JohnDoe, // 自定义的用户名 iat time(), // JWT的签发时间 exp time() 3600 // JWT的过期时间设置为1小时后 ); // 编码并签名JWT $jwt JWT::encode($payload, $key); echo JWT: . $jwt . \n; // 仅仅为了演示我们将Payload部分单独提取出来查看 list($headb64, $payb64, $sigb64) explode(., $jwt); $payload_decoded base64_decode($payb64); $payload_json json_decode($payload_decoded, true); echo Payload部分解码后的内容:\n; print_r($payload_json); ?在这个例子中我们首先定义了一个$payload数组里面包含了用户ID、用户名、JWT的签发时间和过期时间。然后我们使用JWT库将这个Payload编码并签名成一个完整的JWT。最后为了演示我们将JWT分解并单独解码了Payload部分来查看其内容。注意在实际应用中你应该始终通过HTTPS来传输JWT以确保其安全性。而且Payload中不应该包含任何敏感信息因为它只是被编码而不是被加密。