从Azure获取令牌以访问Microsoft Graph后无法调用函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从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')
});
};
请检查租户中设置的访问令牌生命周期。
这实际上不是由Microsoft Graph确定,而是由Azure Active Directory确定。对于给定的租户,可以使用Configurable token lifetimes in Azure Active Directory (Public Preview)配置生命周期。
此功能仍在预览中,因此功能可能会在现在和一般版本之间发生变化。
此配置是每个租户,服务主体或应用程序。如果在应用程序上对其进行配置,则该策略将应用于多租户应用程序,除非被服务主体或租户级别的策略取代。
Access令牌的最长生命周期为24小时(最短为10分钟,默认为1小时)。
通常,您应该依赖于刷新令牌,而不是调整访问令牌的生命周期。它们的寿命更长,为14天。
刷新令牌
当客户端获取访问令牌以访问受保护资源时,客户端也会收到刷新令牌。刷新令牌用于在当前访问令牌到期时获取新的访问/刷新令牌对。刷新令牌绑定到用户和客户端的组合。可以随时撤消刷新令牌,并且每次使用令牌时都会检查令牌的有效性。用于获取新访问令牌时,刷新令牌不会被撤销 - 但最佳做法是在获取新令牌时安全删除旧令牌。
以上是关于从Azure获取令牌以访问Microsoft Graph后无法调用函数的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 microsoft azure 用户的情况下使用 swift 获取访问令牌?
从 Azure Active Directory 验证 JWT
如何使用 asp.net mvc 从 azure 获取访问令牌