#javascript #node.js #azure
#javascript #node.js #azure
Вопрос:
Я пишу функцию Azure, которая принимает токен OAuth от Microsoft, который я смог успешно получить. Я пытаюсь использовать этот токен для доступа к Microsoft Graph. После того, как я получаю токен от Microsoft, время ожидания моей функции истекает через десять минут и не проходит context.log('CALLING MS GRAPH'.)
, я новичок в Azure и не смог понять, почему я не могу вызвать свою вторую функцию со значением токена, возвращенного из Microsoft, или с жестко заданным значением.
Любая помощь приветствуется 🙂
Я пытался жестко закодировать значение токена в функцию, изменить время ожидания и добавить различные context.log(), но не могу пройти мимо получения токена. Я также попытался удалить .end() из моего POST-вызова.
const https = require('https');
const querystring = require('querystring');
getAccessToken = (context, callback) => {
const postData = querystring.stringify({
'client_id': {clientID},
'scope': 'https://graph.microsoft.com/.default',
'client_secret': {clientSecret},
'grant_type': 'client_credentials'
});
const msTokenOptions = {
hostname: 'login.microsoftonline.com',
port: 443,
path: `/${tenantID}}/oauth2/v2.0/token`,
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': postData.length
}
};
const oauthReq = https.request(msTokenOptions, (res) => {
res.setEncoding('utf8');
res.on('data', (d) => {
let accessToken = JSON.parse(d).access_token;
// Error happens here.
context.log('CALLING MSGRAPH')
// I never make it into the functions below, regardless of how they're called.
callback(accessToken);
accessMsGraph(accessToken)
});
});
oauthReq.on('error', (e) => {
context.log('ERROR: Problem obtaining MS Token. ' e);
});
oauthReq.write(postData);
oauthReq.end();
return;
};
accessMsGraph = (token) => {
// GET request to MS Graph here - I never make it into this function.
};
module.exports = (context, req) => {
getAccessToken(context, (token) => {
context.log('Accessing graph')
accessMsGraph(context, token)
accessMsGraph('123456')
});
};
Ответ №1:
Пожалуйста, проверьте срок службы токена доступа, который был установлен в вашем клиенте.
На самом деле это определяется не Microsoft Graph, а Azure Active Directory.Для данного клиента время жизни можно настроить с помощью настраиваемых времен жизни токена в Azure Active Directory (общедоступный предварительный просмотр).
Эта функциональность все еще находится в предварительном просмотре, поэтому функциональность может измениться между текущим моментом и общим выпуском.
Эта конфигурация для каждого клиента, участника службы или приложения. Если вы настроите его в приложении, политика будет применяться к многопользовательским приложениям, если она не будет заменена политикой на уровне участника службы или клиента.
Максимальное время жизни токена доступа составляет 24 часа (минимум 10 минут, по умолчанию — 1 час).
В общем, вместо того, чтобы регулировать время жизни токена доступа, вы должны полагаться на токен обновления. У них гораздо более длительный срок службы — 14 дней.
Обновить токен
Когда клиент получает токен доступа для доступа к защищенному ресурсу, клиент также получает токен обновления. Токен обновления используется для получения новых пар токенов доступа / обновления по истечении срока действия текущего токена доступа. Токен обновления привязан к комбинации пользователя и клиента. Токен обновления может быть отозван в любое время, и действительность токена проверяется при каждом использовании токена. Токены обновления не отменяются при использовании для извлечения новых токенов доступа — однако рекомендуется безопасно удалять старый токен при получении нового.