在 Postman 预请求脚本中获取 Azure REST 访问令牌
Get Azure REST access token in Postman pre-request script
有谁知道在 Postman 预请求脚本中获取 Azure 访问令牌的最佳方法是什么?尝试获取当前登录用户的令牌而不必创建服务主体,这在 How to Call the Azure REST APIs with Postman In No Time Flat.
中有描述
我在预请求脚本中尝试过:
var msRestAzure = require('ms-rest-azure');
function getAccessToken(){
return msRestAzure.loginWithAppServiceMSI({resource: 'https://management.azure.com/'});
}
pm.globals.set("access_token", getAccessToken());
但它不断抛出错误:There was an error in evaluating the Pre-request Script: Error: Cannot find module 'ms-rest-azure'
。截图如下:
app服务中需要使用loginWithAppServiceMSI
,会使用app服务的Managed Identity获取token,在Postman预请求脚本中不支持使用它。
I have restricted access and unable to create service principal that has the access I need. Want to test locally with my credentials.
在这种情况下,如果您想使用您的用户凭据在预请求脚本中获取令牌,您的选择是使用 Azure AD ROPC flow.
注:
由于安全问题不推荐使用ROPC流程,需要在邮递员中暴露用户名和密码,如果您的用户账户启用了MFA,则无法使用。
要使用此流程,您还需要一个 AD 应用程序(应用程序注册),如果您没有创建权限,解决方法是使用 Microsoft 内置应用程序,例如Microsoft Azure PowerShell,你可以使用这种方式进行测试,但我不建议你在生产环境中使用它。
请按照以下步骤操作:
1.Change邮递员集合中的预请求脚本如下。
pm.sendRequest({
url: 'https://login.microsoftonline.com/' + pm.variables.get("tenantId") + '/oauth2/token',
method: 'POST',
header: 'Content-Type: application/x-www-form-urlencoded',
body: {
mode: 'urlencoded',
urlencoded: [
{key: "grant_type", value: "password", disabled: false},
{key: "client_id", value: pm.variables.get("clientId"), disabled: false},
{key: "username", value: pm.variables.get("username"), disabled: false},
{key: "resource", value: pm.variables.get("resource"), disabled: false},
{key: "password", value: pm.variables.get("password"), disabled: false}
]
}
}, function (err, res) {
pm.globals.set("bearerToken", res.json().access_token);
});
2.Use 如下所示的变量。
clientId
resource
subscriptionId
tenantId
username
password
注意:clientId
是1950a258-227b-4e31-a9cf-717495945fc2
,也就是微软应用Microsoft Azure PowerShell
的clientId
,别不要改变它。
3.The其他设置同你提供的blog,然后发送请求获取资源组,我这边没问题
有谁知道在 Postman 预请求脚本中获取 Azure 访问令牌的最佳方法是什么?尝试获取当前登录用户的令牌而不必创建服务主体,这在 How to Call the Azure REST APIs with Postman In No Time Flat.
中有描述我在预请求脚本中尝试过:
var msRestAzure = require('ms-rest-azure');
function getAccessToken(){
return msRestAzure.loginWithAppServiceMSI({resource: 'https://management.azure.com/'});
}
pm.globals.set("access_token", getAccessToken());
但它不断抛出错误:There was an error in evaluating the Pre-request Script: Error: Cannot find module 'ms-rest-azure'
。截图如下:
app服务中需要使用loginWithAppServiceMSI
,会使用app服务的Managed Identity获取token,在Postman预请求脚本中不支持使用它。
I have restricted access and unable to create service principal that has the access I need. Want to test locally with my credentials.
在这种情况下,如果您想使用您的用户凭据在预请求脚本中获取令牌,您的选择是使用 Azure AD ROPC flow.
注:
由于安全问题不推荐使用ROPC流程,需要在邮递员中暴露用户名和密码,如果您的用户账户启用了MFA,则无法使用。
要使用此流程,您还需要一个 AD 应用程序(应用程序注册),如果您没有创建权限,解决方法是使用 Microsoft 内置应用程序,例如Microsoft Azure PowerShell,你可以使用这种方式进行测试,但我不建议你在生产环境中使用它。
请按照以下步骤操作:
1.Change邮递员集合中的预请求脚本如下。
pm.sendRequest({
url: 'https://login.microsoftonline.com/' + pm.variables.get("tenantId") + '/oauth2/token',
method: 'POST',
header: 'Content-Type: application/x-www-form-urlencoded',
body: {
mode: 'urlencoded',
urlencoded: [
{key: "grant_type", value: "password", disabled: false},
{key: "client_id", value: pm.variables.get("clientId"), disabled: false},
{key: "username", value: pm.variables.get("username"), disabled: false},
{key: "resource", value: pm.variables.get("resource"), disabled: false},
{key: "password", value: pm.variables.get("password"), disabled: false}
]
}
}, function (err, res) {
pm.globals.set("bearerToken", res.json().access_token);
});
2.Use 如下所示的变量。
clientId
resource
subscriptionId
tenantId
username
password
注意:clientId
是1950a258-227b-4e31-a9cf-717495945fc2
,也就是微软应用Microsoft Azure PowerShell
的clientId
,别不要改变它。
3.The其他设置同你提供的blog,然后发送请求获取资源组,我这边没问题