如何在邮递员上打开JWT令牌以将声明值之一放在变量上

时间:2018-10-02 11:10:35

标签: jwt postman

要使用Postman在我的应用程序上创建especific测试,登录并获取JWT令牌后,我需要获取especific声明值以用于Postman上另一个POST的变量中。

没有开发API就能做到吗?

谢谢

2 个答案:

答案 0 :(得分:0)

我已经在Postman中创建了一个“登录”请求,然后响应的测试部分包含以下内容

  var data = JSON.parse(responseBody);
  postman.clearGlobalVariable("access_token");
  postman.setGlobalVariable("access_token", data.access_token);

这会将访问令牌放在全局变量中,因此您可以在任何地方使用它。如果您想从JWT的声明中读到一些东西,那会有些复杂。请查看如何在https://github.com/postmanlabs/postman-app-support/issues/1180#issuecomment-115375864处添加库。我将使用JWT解码库-https://github.com/auth0/jwt-decode

答案 1 :(得分:0)

这是一个简单的功能。

let jsonData = pm.response.json();
// use whatever key in the response contains the jwt you want to look into.  This example is using access_token
let jwtContents = jwt_decode(jsonData.access_token);

// Now you can set a postman variable with the value of a claim in the JWT
pm.variable.set("someClaim", jwtContents.payload.someClaim);

function jwt_decode(jwt) {
    var parts = jwt.split('.'); // header, payload, signature
    let tokenContents={};
    tokenContents.header = JSON.parse(atob(parts[0]));
    tokenContents.payload = JSON.parse(atob(parts[1]));
    tokenContents.signature = atob(parts[2]);

    // this just lets you see the jwt contents in the postman console.
    console.log("Token Contents:\n" + JSON.stringify(tokenContents, null, 2));

    return tokenContents;
}

在此示例中,签名位仍然没有用,因此您不能以此来对其进行验证,但是它仍然可以解决您的问题。