Authorization code flow 获取token, 之前都是先从浏览器上访问输入用户名/密码后得到code, 拿着code到postman上通过request拿到token 感觉很麻烦 后来发现 postman上可以直接配置,还挺方便 虽然还是有点问题 但是比之前好多了
配置如下图:
然后 就可以获取一个到token了
点击Manage Tokens 就可以查看token相关信息, 点击Use Token就可以使用token, 如果是在Collections 上设置的话, 它下面的所有request默认(Authorization -> Inherit auth from pare...)就都会使用该token(token加的位置 第一张图上可以设置)
然后有个问题就是 postman不能自动使用refreshToken 获取新的token, 后面token失效只能重新获取token或是手动刷新.
所以我只是随便新建了一个request, 按上面图配置Authorization, 然后Get New Access Token 之后设置Prepare-request Script 点一下send将需要的信息加到变量里(其实可以直接手动将需要的信息加到变量里)
Prepare-request Script 代码
pm.collectionVariables.set('access_token', pm.request.auth.oauth2.get('accessToken'));
pm.collectionVariables.set("refresh_token", "手动粘贴拿到的refresh token");
pm.collectionVariables.set("asscess_token_expires_in", new Date().getTime() + '手动粘贴拿到的token的过期时间');
然后设置request所在的Collection
首先设置Authorization
然后在Prepare-request Script里添加自动刷新token的代码
// Refresh the OAuth token if necessary
const tokenTimestamp = pm.collectionVariables.get("asscess_token_expires_in");
const refreshToken = pm.collectionVariables.get("refresh_token");
if(!(tokenTimestamp && refreshToken) ){
return;
}
const nowTimestamp = new Date().getTime();
if((nowTimestamp - tokenTimestamp) >= 0) {
console.log('token expired will reget token thought refresh token');
pm.sendRequest({
url: pm.globals.get("ping_oauth_base_url")+'/as/token.oauth2',
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: {
mode: 'urlencoded',
urlencoded : [
{ key: 'grant_type', value: 'refresh_token'},
{ key: 'refresh_token', value: pm.collectionVariables.get("refresh_token")},
{ key: 'client_id', value: pm.collectionVariables.get("ac_client")},
]
},
}, function (err, res) {
if (err) throw new Error(err);
pm.collectionVariables.set("access_token", res.json().access_token);
pm.collectionVariables.set("asscess_token_expires_in", new Date().getTime() + res.json().expires_in * 1000 );
});
}
这样在每次发送request的时候 就会自动判断token是不是失效了 失效的话就重新获取token