我正在尝试使用microsoft-graph-client获取电子邮件列表。我获得了refresh_token并配置了App + secret。我的应用程序具有Mail.Read权限
我的代码:
const { Client } = require('@microsoft/microsoft-graph-client');
const dotenv = require('dotenv');
dotenv.config();
const clientId = process.env.OUTLOOK_CLIENT_ID;
const clientSecret = process.env.OUTLOOK_SECRET;
const tenantId = process.env.OUTLOOK_TENANT_ID;
const refreshToken = process.env.OUTLOOK_REFRESH_TOKEN;
async function getAccessToken() {
try {
const url = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`;
const params = new URLSearchParams();
params.append('grant_type', 'refresh_token');
params.append('client_id', clientId);
params.append('client_secret', clientSecret);
params.append('refresh_token', refreshToken);
params.append('scope', 'https://graph.microsoft.com/.default');
const response = await fetch(url, {
method: 'POST',
body: params,
});
// console.log(response)
const data = await response.json();
return data.access_token;
} catch (error) {
console.log(error)
}
}
async function getNewEmails(accessToken) {
try {
const client = Client.init({
authProvider: (done) => {
done(null, accessToken);
},
});
const response = await client.api("/me/messages").top(10).get()
return response.value;
} catch (error) {
console.log(error)
}
}
(async () => {
try {
const accessToken = await getAccessToken();
const newEmails = await getNewEmails(accessToken);
console.log(newEmails);
} catch (error) {
console.log(error)
}
})();
字符串
我在调用“await client.API(“/me/messages”).top(10).get()”函数时得到一个错误
错误代码:
GraphError
at new GraphError (D:\Tools\Bots\bot\node_modules\@microsoft\microsoft-graph-client\lib\src\GraphError.js:34:28)
at Function.<anonymous> (D:\Tools\Bots\bot\node_modules\@microsoft\microsoft-graph-client\lib\src\GraphErrorHandler.js:97:30)
at step (D:\Tools\Bots\bot\node_modules\tslib\tslib.js:193:27)
at Object.next (D:\Tools\Bots\bot\node_modules\tslib\tslib.js:174:57)
at D:\Tools\Bots\bot\node_modules\tslib\tslib.js:167:75
at new Promise (<anonymous>)
at Object.__awaiter (D:\Tools\Bots\bot\node_modules\tslib\tslib.js:163:16)
at GraphErrorHandler.getError (D:\Tools\Bots\bot\node_modules\@microsoft\microsoft-graph-client\lib\src\GraphErrorHandler.js:87:24)
at GraphRequest.<anonymous> (D:\Tools\Bots\bot\node_modules\@microsoft\microsoft-graph-client\lib\src\GraphRequest.js:315:84)
at step (D:\Tools\Bots\bot\node_modules\tslib\tslib.js:193:27) {
statusCode: 401,
code: null,
requestId: null,
date: 2023-11-14T18:18:41.708Z,
body: ReadableStream { locked: false, state: 'readable', supportsBYOB: false }
}
型
我从“getToken()”检查了access_token,它没有“undefined”,我得到了一切权利(我认为)。所以我的主要问题是获得电子邮件。我知道401意味着“未经授权”,但我不知道如何修复它。
1条答案
按热度按时间0tdrvxhp1#
如果您使用客户端凭据流,
“/我/消息”
不是有效的端点,因为服务主体没有邮箱。您需要使用要访问的用户邮箱的用户端点,例如
字符串
然后服务主体将模拟该用户,您可以使用策略https://learn.microsoft.com/en-us/graph/auth-limit-mailbox-access锁定您的应用可以访问的用户,如果您只需要访问邮箱的子集,这是一个好主意。