将敏感数据存储在 JWT 有效负载中是否安全?
我目前正在学习使用PHP实现JWT,并希望使用JWT令牌而不是我的RESTful应用程序的会话。
在签名创建期间,我正在执行类似操作
token = base64Header + '.' + base64Payload + '.' + signature
在这里,我们只使用base64的有效载荷。如果我粘贴像 https://jwt.io/#debugger 这样的网站,Payload就会被解密(即使签名是错误的)。
我的问题,
- JWT 是否仅用于在发送数据时与服务器验证签名?
- 将敏感数据保存在有效负载中是否不安全?
- 如果不安全,有什么方法可以保护有效负载?
以下是我编写的示例代码
<?php
$headers = base64_encode(json_encode([
"typ" => "JWT",
"alg" => "HS256"
]));
$claims = base64_encode(json_encode([
"sub" => "1234567890",
"name" => "John Doe",
"admin" => true,
"jti" => "870a3de5-ea7b-4062-abef-11180e530f5a",
"iat" => 1492603378,
"exp" => 1492606978
]));
$payload = $headers.".".$claims;
$signature = base64_encode(hash_hmac("sha256", $payload, 'secret', true));
$encodedJWT = $payload.".".$signature;
// eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImp0aSI6Ijg3MGEzZGU1LWVhN2ItNDA2Mi1hYmVmLTExMTgwZTUzMGY1YSIsImlhdCI6MTQ5MjYwMzM3OCwiZXhwIjoxNDkyNjA2OTc4fQ.nvw-bAUgr7H_xr3q8_Yz8rCNtMohtn2YlCmcLoLBWlc