Microsoft graph api Microsoft Graph returns";令牌不包含任何权限,“;使用仅应用程序令牌时

Microsoft graph api Microsoft Graph returns";令牌不包含任何权限,“;使用仅应用程序令牌时,microsoft-graph-api,microsoft-graph-mail,Microsoft Graph Api,Microsoft Graph Mail,使用Postman,我正在尝试检索Outlook邮箱中收到的最后一封电子邮件 为了实现这一点,我已经在应用程序门户中声明了我的应用程序。然后,我可以执行GET请求从端点获取令牌: https://login.microsoftonline.com/[tenantId]/oauth2/token 接下来,我尝试使用收到的令牌在 https://graph.microsoft.com/v1.0/me/mailfolders/inbox/messages 问题在于API返回: { "code"

使用Postman,我正在尝试检索Outlook邮箱中收到的最后一封电子邮件

为了实现这一点,我已经在应用程序门户中声明了我的应用程序。然后,我可以执行
GET
请求从端点获取令牌:

https://login.microsoftonline.com/[tenantId]/oauth2/token
接下来,我尝试使用收到的令牌在

https://graph.microsoft.com/v1.0/me/mailfolders/inbox/messages
问题在于API返回:

{
  "code": "NoPermissionsInAccessToken",
  "message": "The token contains no permissions, or permissions can not be understood.",
}

在我的应用程序权限中,我已授权与阅读电子邮件相关的所有操作。我错过什么了吗

这听起来像是你忘了“授予许可”(这发生在我们当中最好的人身上:p)

为您的租户授予许可。最简单的方法是->Azure广告->应用注册->应用->设置->所需权限->按钮授予访问权限。)

与此相关


它还有助于获取令牌,并粘贴到其中,将向您显示令牌中的所有数据(还应显示有关授予权限的声明)。

我实际上缺少对作用域的管理员批准(在我的例子中是read.mail)。在仅应用程序的使用中,您需要获得管理员的批准。为此,管理员必须使用以下url:

https://login.microsoftonline.com/common/adminconsent?client_id=[您的\u客户端\u id]&状态=[随机\u字符串]&重定向\u uri=http://localhost/


管理员将被提示批准权限。

例外情况是用于查找会议时间或发送邮件的API,该API仅适用于Office 365邮箱(在Azure AD上),而不适用于Microsoft帐户

为便于参考,本文的其余部分使用Outlook.com包含这些Microsoft帐户域


欢迎使用堆栈溢出!我强烈推荐阅读一些关于开始的技巧。您的问题中遗漏了很多关键细节:您到底注册了哪些作用域?您到底是如何调用
/token
?您是否获得此应用程序的“管理员同意”?