要使用Postman在我的应用程序上创建especific测试,登录并获取JWT令牌后,我需要获取especific声明值以用于Postman上另一个POST的变量中。
没有开发API就能做到吗?
谢谢
答案 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;
}
在此示例中,签名位仍然没有用,因此您不能以此来对其进行验证,但是它仍然可以解决您的问题。