Проблема при получении токена доступа к каналу с помощью функции JavaScript, запускаемой по таймеру
У меня есть функция, запускаемая по таймеру Azure, для которой необходимо выполнять различные вызовы API Graph, а это значит, что мне нужен токен OAuth2 Bearer, выданный AAD моего арендатора.
Итак, я написал нижеприведенную функцию, основанную на коде, который я ранее написал для выполнения вызовов Ajax, который вызывает AAD для получения нужного токена Bearer.
Я проверил настройки URL, Client ID, Client Secret и Grant Type с помощью Postman, и они вернули мне действительный токен на предъявителя. Однако код выполняет вызов, и ничего не возвращается, просто кажется, что он зависает. При тестовом запуске на портале 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 и секрет, который я передаю, верны. Это должно быть что-то еще в коде, но я озадачен тем, что. Есть какие-нибудь подсказки?