Rest Microsoft Graph API-访问邮件时发生身份验证错误
我目前正在实现一个Outlook加载项,它应该可以访问某些邮件字段。因此,我设置了一个初学者项目,并在Microsoft Azure Active Directory设置中设置委派的Mail.Read权限,并将其添加到我的范围配置中。 但是,当我发送请求时Rest Microsoft Graph API-访问邮件时发生身份验证错误,rest,azure-active-directory,microsoft-graph-api,outlook-addin,microsoft-graph-mail,Rest,Azure Active Directory,Microsoft Graph Api,Outlook Addin,Microsoft Graph Mail,我目前正在实现一个Outlook加载项,它应该可以访问某些邮件字段。因此,我设置了一个初学者项目,并在Microsoft Azure Active Directory设置中设置委派的Mail.Read权限,并将其添加到我的范围配置中。 但是,当我发送请求时 graph.microsoft.com/v1.0/me/messages/ 我得到的回应是: Error: Bad Request at IncomingMessage.<anonymous> (C:\Users\zz\publ
graph.microsoft.com/v1.0/me/messages/
我得到的回应是:
Error: Bad Request
at IncomingMessage.<anonymous> (C:\Users\zz\public\javascripts\odata-helper.js:53:29)
at IncomingMessage.emit (events.js:322:22)
at endReadableNT (_stream_readable.js:1187:12)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
code: 400,
bodyCode: 'AuthenticationError',
bodyMessage: 'Error authenticating with resource'
}
错误:请求错误
在IncomingMessage。我没有复制您的问题,并且graph.microsoft.com/v1.0/me/messages
在您共享的示例中运行良好
请参考我的配置
除了文档中提到的配置之外,我还做了以下更改
在Azure AD应用程序中添加邮件。读取委托权限。
在app.js
文件中修改Microsoft Graph端点。请注意,我正在查询消息的subject
属性。所以我修改了两个地方:$select=subject&$top=10
和itemNames.push(item['subject]])
在外接程序清单文件“manifest\manifest\u local.xml”中,我添加了一个作用域“Mail.Read”
这些是所有配置,我可以在Microsoft Word addin中获取邮件主题:
我没有重现您的问题,graph.microsoft.com/v1.0/me/messages
在您共享的示例中运行良好
请参考我的配置
除了文档中提到的配置之外,我还做了以下更改
在Azure AD应用程序中添加邮件。读取委托权限。
在app.js
文件中修改Microsoft Graph端点。请注意,我正在查询消息的subject
属性。所以我修改了两个地方:$select=subject&$top=10
和itemNames.push(item['subject]])
在外接程序清单文件“manifest\manifest\u local.xml”中,我添加了一个作用域“Mail.Read”
这些是所有配置,我可以在Microsoft Word addin中获取邮件主题:
请提供请求或相关id和时间戳。如果在例外情况下不可用,那么您可以让他们在fiddler中检查响应。嗨,您有机会查看我的答案吗?有帮助吗?请提供请求或相关id和时间戳。如果在例外情况下不可用,那么您可以让他们在fiddler中检查响应。嗨,您有机会查看我的答案吗?这有帮助吗?谢谢你非常详细的回答,我加入了你的配置。然而,一切都不会改变。我仍然得到了AuthenticationError。但有趣的是,我刚刚在Graph Explorer上尝试了相同的端点(使用我的公司凭据),但得到了相同的错误。这整件事可能与使用内部部署Exchange实例的公司有关吗?还是不相关?谢谢你非常详细的回答,我加入了你的配置。然而,一切都不会改变。我仍然得到了AuthenticationError。但有趣的是,我刚刚在Graph Explorer上尝试了相同的端点(使用我的公司凭据),但得到了相同的错误。这整件事可能与使用内部部署Exchange实例的公司有关吗?还是说这无关紧要?
app.get('/getuserdata', async function(req, res, next) {
const graphToken = req.get('access_token');
const graphData = await getGraphData(graphToken, "/me/messages", "?$select=subject&$top=10");
if (graphData.code) {
next(createError(graphData.code, "Microsoft Graph error " + JSON.stringify(graphData)));
}
else
{
const itemNames = [];
const oneDriveItems = graphData['value'];
for (let item of oneDriveItems){
itemNames.push(item['subject']);
}
res.send(itemNames)
}
}
<WebApplicationInfo>
<Id>a7eb1d00-f724-4799-8a46-809f2dba63f8</Id>
<Resource>api://localhost:44355/a7eb1d00-f724-4799-8a46-809f2dba63f8</Resource>
<Scopes>
<Scope>Files.Read.All</Scope>
<Scope>profile</Scope>
<Scope>Mail.Read</Scope>
</Scopes>
</WebApplicationInfo>
else {
const [schema, jwt] = authorization.split(' ');
const formParams = {
client_id: process.env.CLIENT_ID,
client_secret: process.env.CLIENT_SECRET,
grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
assertion: jwt,
requested_token_use: 'on_behalf_of',
scope: ['Files.Read.All', 'Mail.Read'].join(' ')
};