如何在 Node.JS 中将 Json Web Token 拆分为 Header-Payload-Signature

Posted

技术标签:

【中文标题】如何在 Node.JS 中将 Json Web Token 拆分为 Header-Payload-Signature【英文标题】:How to split Json Web Token as Header-Payload-Signature in Node.JS 【发布时间】:2020-03-01 17:12:51 【问题描述】:

我有 node.js 应用程序。我使用 Json Web Token 进行授权。 JWT 包含三个部分,分别是 header、payload 和 signature。这些部分之间有一个点,如下图所示。

token = header.payload.signature  ||  token= xxxxx.yyyyyy.zzzzz

token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

我需要从创建的标头令牌中获取有效负载值(中间部分)。我需要将令牌拆分为 3 部分(Header-Payload-Signature)。

我用这个方法:

const token= req.headers.authorization.split("")[1];
header,payload,signature = token.split('.')

但这不起作用。有没有其他的拆分方法或建议给我?

编辑:可以认为我有一个字符串(基本上是遵循命名约定的文件名)abc.def.ghi

我想在第一个 . (即一个点)

在 javascript 中,我该怎么做?

【问题讨论】:

【参考方案1】:

你走在正确的道路上。您可以像这样拆分您的令牌:

用于测试的基本 html

<div id="app">
<p id="head"></p>
<p id="pay"></p>
<p id="sign"></p>
</div>

实际的javascript代码:

var token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"

var [header, payload, signature] = token.split(".")

document.getElementById("head").innerHTML= `header: $header`
document.getElementById("pay").innerHTML =`payload: $payload`
document.getElementById("sign").innerHTML= `signature: $signature`

【讨论】:

谢谢!我只是忘了放 [] 括号

以上是关于如何在 Node.JS 中将 Json Web Token 拆分为 Header-Payload-Signature的主要内容,如果未能解决你的问题,请参考以下文章

如何在node.js中将mysql查询的结果输出为json文件

如何使用 express 在用户浏览器的响应标头 cookie 中查找 JSON Web 令牌 (JWT) 来制作 node.js?

如何在 MySQL/MariaDB 中将 LONGTEXT 字段作为 JSON 返回

如何在 Node.js 中将字符串转换为字节数组?

Json 到 node.js 中的 csv

如何在 Node.js 中将文件上传到 GCloud?