我有一个Azure计时器触发函数,该函数需要对Graph API进行各种调用,这意味着我需要由租户的AAD发出的OAuth2 Bearer令牌。
因此,我已经在下面编写了该函数,该函数基于我先前编写的用于进行Ajax调用的代码,该代码对AAD进行了调用以获得我所需的Bearer令牌。
我已经使用邮递员测试了URL,客户端ID,客户端机密和授权类型设置,并且它们返回了有效的承载令牌供我使用。 但是,代码进行了调用,但未返回任何内容,似乎只是挂起了。 在Azure门户中进行测试运行时,我得到一个
状态503服务不可用。
async function getToken() {
return new Promise((resolve, reject) => {
try {
let https = require("https");
let url =
"https://login.microsoftonline.com/<azure_tenancy>.onmicrosoft.com/oauth2/token";
let options = {
method: "POST",
headers: {
"Content-Type": "application/json; charset=utf-8",
"Cache-Control": "no-cache"
}
};
let body = {
grant_type: "client_credentials",
client_id: "<client_id>",
client_secret: "client_secret>",
resource: "https://graph.microsoft.com"
};
var req = https
.request(url, options, res => {
let data = "";
res.on("data", chunk => {
data += chunk;
});
res.on("end", () => {
resolve(JSON.parse(data));
});
})
.on("error", err => {
throw new Exception(e.message);
});
req.write(JSON.stringify(body));
req.end();
} catch (e) {
context.log("error caught");
reject(e);
}
});
}
邮递员返回:
{
"token_type": "Bearer",
"expires_in": "3600",
"ext_expires_in": "3600",
"expires_on": "1558542984",
"not_before": "1558539084",
"resource": "https://graph.microsoft.com",
"access_token": "eyJ...e8mw"
}
所以我知道我传递的URL,ID和Secret是正确的。它一定是代码中的其他内容,但是我对这些内容感到困惑。有任何线索吗?