Rest Microsoft Graph API-访问邮件时发生身份验证错误

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

我目前正在实现一个Outlook加载项,它应该可以访问某些邮件字段。因此,我设置了一个初学者项目,并在Microsoft Azure Active Directory设置中设置委派的Mail.Read权限,并将其添加到我的范围配置中。 但是,当我发送请求时

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(' ')
    };