如何在POSTMAN中解码jwt令牌?

3npbholx  于 2023-03-02  发布在  Postman
关注(0)|答案(5)|浏览(691)

我想解码我使用Postman接收到的jwt令牌,并在REST API中实现它。我该怎么做?我看到有人发布了解码jwt令牌的代码(参考:How to decode jwt token in javascript without using a library?)但是我不知道如何在postman中做到这一点?需要什么url来解码jwt?需要什么报头,授权?

ahy6op9u

ahy6op9u1#

Postman支持cryptojs库:https://learning.postman.com/docs/writing-scripts/script-references/postman-sandbox-api-reference/#using-external-libraries
将以下示例添加到 Postman 测试脚本:

let jwt = `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ0b3B0YWwuY29tIiwiZXhwIjoxNDI2NDIwODAwLCJodHRwOi8vdG9wdGFsLmNvbS9qd3RfY2xhaW1zL2lzX2FkbWluIjp0cnVlLCJjb21wYW55IjoiVG9wdGFsIiwiYXdlc29tZSI6dHJ1ZX0.UsrGn95rk5DStcC_WwIr3WIv5rHe2IApX56I58l8uyo`

a = jwt.split('.');

//a.forEach(function (val) {
    var words = CryptoJS.enc.Base64.parse(a[1]);
    var textString = CryptoJS.enc.Utf8.stringify(words);

    console.log(textString)
//})

输出:

hmacSHA256不是加密算法,而是哈希算法,因此无法对其进行解码,因为哈希是单向函数。
因为最后一部分的形式是

HMACSHA256 of ( base64(header) + "." + base64(body) )

你可以试着创建它并使两者相等

whitzsjs

whitzsjs2#

您可以使用atob函数对Base64字符串进行解码。(https://developer.mozilla.org/pt-BR/docs/Web/API/atob
它可以在 Postman 脚本中找到。
大概是这样的

// Sample JWT
let jwt = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'

let [jwtHeader, jwtPayload, jwtSignature] = jwt.split('.')

let jwtPayloadJsonString = atob(jwtPayload)

console.log(jwtPayloadJsonString)

let jwtPayloadJson = JSON.parse(jwtPayloadJsonString)

console.log(jwtPayloadJson)
sdnqo3pr

sdnqo3pr3#

https://jwt.io/,如果你愿意,这可以解决你的问题,如果你使用任何IDE,你也可以下载一些插件

btxsgosb

btxsgosb4#

基于PDHide的回答,我为Postman编写了这个现成的代码片段:

var jsonData = JSON.parse(responseBody);

let [header, payload, signature] = jsonData.access_token.split('.');

function decode(x) {
    let wordArray = CryptoJS.enc.Base64.parse(x);
    let str = CryptoJS.enc.Utf8.stringify(wordArray);
    return JSON.parse(str);
}

console.log("Header: ", decode(header));
console.log("Payload: ", decode(payload));

请参见this链接,了解有关JSON Web令牌的三个部分(头、有效负载和签名)的更多信息。

zhte4eai

zhte4eai5#

使用CryptoJS

const payloadRaw = jwt.split('.')[1]
const payloadBase64 = CryptoJS.enc.Base64.parse(payloadRaw);
const payload = JSON.parse(payloadBase64.toString(CryptoJS.enc.Utf8));

相关问题