为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

有只小跳蛙 2021-04-17 13:15:23
我正在编写一个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')    });};
查看完整描述

1 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

请检查您租户中设置的访问令牌寿命。

这实际上不是由Microsoft Graph决定的,而是由Azure Active Directory决定的。对于给定的租户,可以使用Azure Active Directory中的配置令牌生存期(公共预览)配置生存期

此功能仍处于预览状态,因此功能可能会在当前版本和一般版本之间发生变化。

此配置是按租户,服务主体或应用程序进行的。如果在应用程序上配置它,则该策略将应用于多租户应用程序,除非被服务主体或租户级别的策略所取代。

Access令牌的最长生存期为24小时(最短为10分钟,默认值为1小时)。

通常,应该调整刷新令牌,而不是调整访问令牌的生存期。它们的使用寿命更长,为14天。

刷新令牌

当客户端获取访问令牌以访问受保护的资源时,客户端还将收到刷新令牌。当前访问令牌到期时,刷新令牌用于获取新的访问/刷新令牌对。刷新令牌绑定到用户和客户端的组合。刷新令牌可以随时撤消,并且每次使用令牌时都会检查令牌的有效性。刷新令牌在用于获取新的访问令牌时不会被撤消-但是,最佳做法是在获取新令牌时安全删除旧令牌。


查看完整回答
反对 回复 2021-04-29
  • 1 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信