在 Angular 中解码 firebase/php-jwt 6

Decode firebase/php-jwt in Angular 6

我在 后端 Api(使用 Lumen) 中使用 firebase/php-jwt 来服务 身份验证令牌。 我在 Frontend.

中使用 Angular 6

这是我登录后从后端得到的结果:-

{
"message": "Successfully Authenticated !",
"status": "Found",
"code": 200,
"data": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsdW1lbi1qd3QiLCJzdWIiOjEsImlhdCI6MTUzMzgxNjc3OCwiZXhwIjoxNTMzODIwMzc4fQ.84BaTHYoWPEzNsZ6Qu0YK-VQelN0WQ0gcmUdXsxO7OA"
}

我的 有效载荷结构 这个令牌是:-

$payload = [
        'iss' => "lumen-jwt", // Issuer of the token
        'sub' => $user->user_id, // Subject of the token
        'iat' => time(), // Time when JWT was issued.
        'exp' => time() + (60*60) // Expiration time
    ];

所以,当我解码它时,我只是解码:-

JWT::encode($payload, env('JWT_SECRET')); // In environment file "JWT_SECRET={random_secret_code}"

所以,我有一个 常量 JWT_SECRET,我正在使用它。

我的问题是令牌是在哪些算法中生成的?因为我没有 在 encode() 函数中指定任何算法?

现在Angular我如何通过解码令牌来提取user_id,有效期和其他信息?

令牌是使用 HS256 算法签名的,该算法可能被配置为 PHP-JWT 中的默认算法。您只需将您的令牌粘贴到 https://jwt.io 在线调试器中即可获得该信息。

header 看起来像这样:

{
  "typ": "JWT",
  "alg": "HS256"
}

在Angular中,您可以使用包jwt-decode:

安装:npm install --save jwt-decode

并像这样使用它:

var decode = require('jwt-decode');

var token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsdW1lbi1qd3QiLCJzdWIiOjEsImlhdCI6MTUzMzgxNjc3OCwiZXhwIjoxNTMzODIwMzc4fQ.84BaTHYoWPEzNsZ6Qu0YK-VQelN0WQ0gcmUdXsxO7OA"
const tokenPayload = decode(token);

console.log(tokenPayload.exp) // read the expiration time