邮递员中服务帐户的访问令牌包含很多

Access token for Service Account in postman contains lots of

我的access_token包含很多...

我只需要手动复制访问令牌的相关部分(没有尾随...)来跟进请求。

如何在不尾随 ... 的情况下将此访问令牌解析为邮递员中的变量,因为如果我输入

pm.environment.set("AccessToken", accessToken);

Postman 中 Tests 部分的上一行,然后是 AccessToken 变量

好的,我可以通过请求测试部分中的以下脚本从访问令牌中删除尾随...

var response = pm.response.json()
var accessToken = response.access_token;
while(accessToken.charAt(accessToken.length-1) == '.')
{
    accessToken = accessToken.substr(0, accessToken.length-1);
}
pm.collectionVariables.set("AccessToken", accessToken);

@DalmTo 我是这样做的。 (我使用了现有的集合,对脚本做了一些小改动 - 对不起,我忘记了我从哪里得到的脚本)

一共2个请求(只有第1次2个请求,之后只需要执行第2个请求)

前提步骤

创建集合变量 privateKey 并将其值设置为您在创建服务帐户密钥期间获得的 .json 文件中的私钥。

例如

{-----BEGIN PRIVATE KEY-----*****(Complete PRIVATE Key excluding \n from it)****-----END PRIVATE KEY-----
}

请求1个脚本(你只需要运行这个脚本一次)

GET  http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js

在此请求中将以下脚本放入 Tests 部分以将 jsrsasign-js 保存为集合变量

pm.collectionVariables.set('jsrsasign-js', responseBody);

Request 2 Script(你运行这个请求每次都需要token)

POST  https://oauth2.googleapis.com/token

正文 x-www-form-urlencoded

grand_type : urn:ietf:params:oauth:grant-type:jwt-bearer

断言:{{jwt}}

预请求脚本

var navigator = {};
var window = {};

eval(pm.collectionVariables.get("jsrsasign-js"));

var scope = pm.collectionVariables.get('scope');
var iss = pm.collectionVariables.get('iss');
var privateKey = pm.collectionVariables.get('privateKey');

const header = {"alg" : "RS256", "typ" : "JWT"};

const claimSet =
{
  "iss":"service account email",
  "sub":"user's email that you requesting token for",
  "scope":"https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/calendar.events" ,
  "aud":"https://oauth2.googleapis.com/token",
  "exp":KJUR.jws.IntDate.get("now + 1hour").toString(),
  "iat": KJUR.jws.IntDate.get("now").toString()
}

console.log(`header: ${ JSON.stringify(header)}`);
console.log(`claim set: ${ JSON.stringify(claimSet) }`);

var jwt =  KJUR.jws.JWS.sign(null, header, claimSet, privateKey);
console.log(jwt);

pm.collectionVariables.set('jwt', jwt);

在上面的脚本中,你可以改变 "sub" : "用户的电子邮件地址" 来模拟该用户并代表他们获取令牌。另外,将 "Scope" : " 更改为适当的范围"

现在,当您 运行 第二个请求时,您将获得响应令牌

{
    "access_token": "ya29.a0ARr*********",
    "expires_in": 3599,
    "token_type": "Bearer"
}

您可以将此脚本添加到第二个请求的 Tests 部分,以将该令牌解析为集合变量,并将该变量用于 Google [= 的所有后续请求99=]

var response = pm.response.json()
var accessToken = response.access_token;
while(accessToken.charAt(accessToken.length-1) == '.')
{
    accessToken = accessToken.substr(0, accessToken.length-1);
}
pm.collectionVariables.set("AccessToken", accessToken);

后续请求

GET  https://www.googleapis.com/calendar/v3/calendars/calendarID/events

授权

类型:不记名令牌

令牌:{{AccessToken}}

澄清

当我使用“sub”请求特定用户的令牌时:“用户的电子邮件”,我收到的访问令牌没有尾随....。