在Angular 6中解码firebase / php-jwt

时间:2018-08-09 14:02:47

标签: angular jwt angular6 lumen php-jwt

我在后端Api(使用流明)中使用 firebase / php-jwt 来提供身份验证令牌。 并且我在前端使用 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,到期时间和其他信息?

1 个答案:

答案 0 :(得分:0)

使用HS256算法对令牌进行了签名,该算法可能已配置为PHP-JWT中的默认算法。您只需将令牌粘贴到https://jwt.io在线调试器中即可获取该信息。 标题看起来像这样:

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

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

通过以下方式安装: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