使用 Office365 和 MicrosoftGraph 发送邮件失败 "Forbidden"

Sending mail with Office365 & MicrosoftGraph fails with "Forbidden"

我从 http://dev.office.com/code-samples-detail/5985 下载了 Office 365 Connect ASP.NET MVC 示例代码,将其注册为 Azure Active Directory 中的应用程序(我拥有全局管理员权限),并为其授予了所需的权限 - 'Sign in and read user profile' 和 'Send mail as a user'(没有其他),并用 'ClientID' 和 'ClientSecret' 配置了 web.config。该应用程序允许我连接 Office 365,但是当我尝试发送电子邮件时 returns "Forbidden"。

我使用 VS2015 调试器捕获了我在登录时收到的 AccessToken,并使用 http://jwt.calebb.net/ 对其进行了解码。它说令牌提供 "User.Read" 权限,仅此而已。我了解令牌仅提供可从应用程序和用于登录 Office 365 的用户凭据获得的权限。但我已使用 Outlook Web Access 验证用户凭据确实具有邮箱和发送电子邮件的权限。

那么,关于为什么我没有获得我在 AAD 中配置的所有权限有什么想法吗?

我怀疑您已将发送邮件设置为应用程序权限(使用客户端凭据作为应用程序进行身份验证 - 通常作为后台进程)而不是委派权限(作为特定用户进行身份验证)。

下次使用app前登录,可以在url的末尾加上&prompt=consent吗?它应该看起来像这样:

https://login.microsoftonline.com/common/oauth2/authorize?response_type=id_token&client_id=...&nonce=e231a375-6925-47d2-8704-9fce2d900620&prompt=consent

这会提示重新同意,以便向用户显示您所做的权限更新,他们可以同意,并且这些权限将包含在返回的令牌中。