邮递员中服务帐户的访问令牌包含很多
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”请求特定用户的令牌时:“用户的电子邮件”,我收到的访问令牌没有尾随....。
我的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”请求特定用户的令牌时:“用户的电子邮件”,我收到的访问令牌没有尾随....。