从Azure取回令牌以访问Microsoft Graph后无法调用函数


我正在编写一个Azure函数,该函数需要从Microsoft获得的OAuth令牌,而我已经能够成功获取它。我正在尝试使用该令牌访问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')

    });

};



有只小跳蛙
浏览 210回答 1
1回答

眼眸繁星

请检查您租户中设置的访问令牌寿命。这实际上不是由Microsoft Graph决定的,而是由Azure Active Directory决定的。对于给定的租户,可以使用Azure Active Directory中的可配置令牌生存期(公共预览)来配置生存期。此功能仍处于预览状态,因此功能可能会在当前版本和一般版本之间发生变化。此配置是按租户,服务主体或应用程序进行的。如果在应用程序上配置它,则该策略将应用于多租户应用程序,除非被服务主体或租户级别的策略所取代。Access令牌的最长生存期为24小时(最短为10分钟,默认值为1小时)。通常,应该调整刷新令牌,而不是调整访问令牌的生存期。它们的使用寿命更长,为14天。刷新令牌当客户端获取访问令牌以访问受保护的资源时,客户端还将收到刷新令牌。当前访问令牌到期时,刷新令牌用于获取新的访问/刷新令牌对。刷新令牌绑定到用户和客户端的组合。刷新令牌可以随时撤消,并且每次使用令牌时都会检查令牌的有效性。刷新令牌在用于获取新的访问令牌时不会被撤消-但是,最佳做法是在获取新令牌时安全删除旧令牌。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript