首页  >  文章  >  web前端  >  如何在没有外部库的情况下在 JavaScript 中解码 JWT 令牌?

如何在没有外部库的情况下在 JavaScript 中解码 JWT 令牌?

Patricia Arquette
Patricia Arquette原创
2024-11-01 00:26:28795浏览

 How to Decode JWT Tokens in JavaScript Without External Libraries?

在没有库的情况下在 JavaScript 中解码 JWT 令牌

解码 JWT(JSON Web 令牌)的有效负载对于访问和使用其声明至关重要在前端应用程序中。以下是两种无需借助库即可解码 JWT 令牌的有效方法:

浏览器:

在浏览器环境中,我们可以采用以下步骤来提取 JSON 负载:

  1. 使用点 ('.') 作为分隔符将令牌分成三个部分。
  2. 使用 base64url (RFC 4648 §5) 解码包含有效负载的第二部分).
  3. 将 base64url 编码的有效负载解码为 Unicode 文本字符串。
  4. 将 Unicode 字符串解码为 JSON 对象。

JavaScript 代码:

<code class="javascript">function parseJwt(token) {
    const base64UrlPayload = token.split('.')[1];
    const base64Payload = base64UrlPayload.replace(/-/g, '+').replace(/_/g, '/');
    const jsonPayload = decodeURIComponent(window.atob(base64Payload).split('').map(c => {
        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
    }).join(''));

    return JSON.parse(jsonPayload);
}</code>

Node.js:

Node.js 提供了一种简单的方法来解码 JWT 负载:

  1. Split使用点 ('.') 作为分隔符将令牌分为三个部分。
  2. 使用 Base64 解码第二部分,其中包含有效负载。
  3. 转换解码后的有效负载,这是缓冲区对象,转换为 JSON 对象。

JavaScript 代码:

<code class="javascript">function parseJwt(token) {
    const base64Payload = token.split('.')[1];
    const payloadBuffer = Buffer.from(base64Payload, 'base64');
    const payload = JSON.parse(payloadBuffer.toString());

    return payload;
}</code>

注意: 这些方法不会验证签名JWT 令牌。强烈建议使用库进行签名验证,以保证token的真实性。

以上是如何在没有外部库的情况下在 JavaScript 中解码 JWT 令牌?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn