从客户端向 JWT 添加数据
Adding data to JWT from the client-side
我是 JWT 新手。我有一个 API 为客户端生成一个 JWT,以便对进一步的请求进行身份验证。我的 JWT 有一个 属性,returns 用户 ID:
{
jwt: {
exp: "2017-12-12 00:00:00",
data: {
user_id: 491
}
}
}
我的问题是客户端是否可以解码由 API 生成的 JWT 并将新的 属性 添加到数据字段中,如下所示:
{
jwt: {
exp: "2017-12-12 00:00:00",
data: {
user_id: 491,
status: 1
}
}
}
或者,如果我可以从 API 身份验证系统生成 JWT,并将状态字段设置为默认值,然后客户端可以更改它。
谢谢。
客户端可以这样做,但会使令牌无效。当您更改有效负载的内容时,例如添加另一个字段或更改其内容,令牌的签名不再匹配。当 API 收到带有无效签名的令牌时,它应该拒绝该令牌。想象一下,如果您有一个名为 isAdmin
的字段,并且客户端可以将其从 false
更改为 true
。这会使您的身份验证毫无意义;客户端不决定它是否是管理员,后端决定。
当令牌的有效负载发生变化时,必须重新制作签名。为了签署令牌,客户端必须知道密钥(对于 H256)。但是客户端不应该知道密钥。
所以答案是否定的,客户端不能更改令牌。
您可以阅读更多相关内容 here。
换句话说,您想篡改您的 JWT 令牌,并且您不能在不使令牌无效的情况下做到这一点。
签名是在 header 和有效负载上计算的。令牌发行者(服务器)检查签名以验证内容在途中没有被更改。
在最新版本的 JWT Auth
$token = JWTAuth::claims(['account_id' => $account->id])->fromUser($user);
从令牌获取数据:
$payload = JWTAuth::getPayload();
$accountId = $payload->get('account_id');
JWT auth预览版
$token = JWTAuth::fromUser($user, ['account_id' => $account->id]);
从令牌获取数据:
$payload = JWTAuth::getPayload(JWTAuth::getToken());
我是 JWT 新手。我有一个 API 为客户端生成一个 JWT,以便对进一步的请求进行身份验证。我的 JWT 有一个 属性,returns 用户 ID:
{
jwt: {
exp: "2017-12-12 00:00:00",
data: {
user_id: 491
}
}
}
我的问题是客户端是否可以解码由 API 生成的 JWT 并将新的 属性 添加到数据字段中,如下所示:
{
jwt: {
exp: "2017-12-12 00:00:00",
data: {
user_id: 491,
status: 1
}
}
}
或者,如果我可以从 API 身份验证系统生成 JWT,并将状态字段设置为默认值,然后客户端可以更改它。
谢谢。
客户端可以这样做,但会使令牌无效。当您更改有效负载的内容时,例如添加另一个字段或更改其内容,令牌的签名不再匹配。当 API 收到带有无效签名的令牌时,它应该拒绝该令牌。想象一下,如果您有一个名为 isAdmin
的字段,并且客户端可以将其从 false
更改为 true
。这会使您的身份验证毫无意义;客户端不决定它是否是管理员,后端决定。
当令牌的有效负载发生变化时,必须重新制作签名。为了签署令牌,客户端必须知道密钥(对于 H256)。但是客户端不应该知道密钥。
所以答案是否定的,客户端不能更改令牌。
您可以阅读更多相关内容 here。
换句话说,您想篡改您的 JWT 令牌,并且您不能在不使令牌无效的情况下做到这一点。
签名是在 header 和有效负载上计算的。令牌发行者(服务器)检查签名以验证内容在途中没有被更改。
在最新版本的 JWT Auth
$token = JWTAuth::claims(['account_id' => $account->id])->fromUser($user);
从令牌获取数据:
$payload = JWTAuth::getPayload();
$accountId = $payload->get('account_id');
JWT auth预览版
$token = JWTAuth::fromUser($user, ['account_id' => $account->id]);
从令牌获取数据:
$payload = JWTAuth::getPayload(JWTAuth::getToken());