Невозможно вызвать функцию после получения токена из Azure для доступа к Microsoft Graph - PullRequest
0 голосов
/ 12 апреля 2019

Я пишу функцию 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 Ответ

0 голосов
/ 16 апреля 2019

Пожалуйста, проверьте срок жизни токена доступа, который был установлен в вашем арендаторе.

Это на самом деле определяется не Microsoft Graph, а скорее Azure Active Directory. Для данного арендатора время жизни можно настроить с помощью Настраиваемые времена жизни маркеров в Azure Active Directory (Public Preview) .

Эта функция все еще находится в режиме предварительного просмотра, поэтому функциональность может измениться между текущей версией и общим выпуском.

Эта конфигурация указана для каждого клиента, участника службы или приложения. Если вы настроите его в приложении, то эта политика будет применяться к мультитенантным приложениям, если она не заменена политикой на уровне участника-службы или уровня клиента.

Максимальное время жизни токена доступа составляет 24 часа (минимум 10 минут, по умолчанию 1 час).

В целом, вместо того, чтобы настраивать срок действия токена доступа, вместо этого следует полагаться на токен обновления. Они имеют гораздо более длительный срок службы 14 дней.

Жетон обновления

Когда клиент получает токен доступа для доступа к защищенному ресурсу, он также получает токен обновления. Токен обновления используется для получения новых пар токена доступа / обновления, когда истекает текущий токен доступа. Токен обновления связан с комбинацией пользователя и клиента. Токен обновления может быть отозван в любое время, и срок действия токена проверяется каждый раз, когда токен используется. Токены обновления не отменяются при использовании для получения новых токенов доступа, однако рекомендуется при удалении получить новый токен, чтобы безопасно удалить старый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...