首页 > 解决方案 > 是否可以在邮递员中自动执行 Azure 活动目录的 OAuth 2.0 隐式授权流程?

问题描述

我正在尝试自动化 API 的所有测试。目前正在使用使用 AAD 的 utentificacion。问题是:我可以使用邮递员的过程使用OAuth2.0获取令牌

邮递员对话框

在此处输入图像描述

但我无法运行集合并执行类似触发器的操作以在开始时获取令牌。如果我想获取令牌,我必须按下“获取新访问令牌”按钮

有什么方法可以自动完成吗?或者我怎样才能创建一个流程来获取令牌?

谢谢!

标签: oauth-2.0azure-active-directorypostman

解决方案


您可以使用预请求脚本自动执行此操作。您只需要修改您所需的值并将其发布在邮递员的 Pre-request Script 中即可。它最好在父集合中,因此它可以从父集合继承身份验证。

var getToken = true;

if (!pm.environment.get('accessTokenExpiry') || 
    !pm.environment.get('currentAccessToken')) {
    console.log('Token or expiry date are missing')
} else if (pm.environment.get('accessTokenExpiry') <= (new Date()).getTime()) {
    console.log('Token is expired')
} else {
    getToken = false;
    console.log('Token and expiry date are all good');
}

if (getToken === true) {
    pm.sendRequest({
         url: 'https://login.microsoftonline.com/microsoft.onmicrosoft.com/oauth2/token',
    method: 'POST',
    header: 'Content-Type:application/x-www-form-urlencoded',
        body: {
        mode: 'raw',
        raw: 'grant_type=implicit&client_id...'
    }
    }, function (err, res) {
    console.log(err ? err : res.json());
        if (err === null) {
            console.log('Saving the token and expiry date')
            var responseJson = res.json();
            pm.environment.set('currentAccessToken', responseJson.access_token)
    
            var expiryDate = new Date();
            expiryDate.setSeconds(expiryDate.getSeconds() + responseJson.expires_in);
            pm.environment.set('accessTokenExpiry', expiryDate.getTime());
        }
    });
}

对于代码示例,您可以参考此处


推荐阅读