Microsoft Graph API - 发送电子邮件始终返回带有错误文本的响应代码403"访问被拒绝。检查凭据,然后重试。"

时间:2018-03-01 09:43:19

标签: microsoft-graph outlook-api

我们已经实施了通过图表API发送电子邮件。

在微软应用https://apps.dev.microsoft.com中,我们创建了应用并为此应用设置了权限' Mail.Send'。

对于身份验证,我们使用方式"无需用户访问#34;。

我们通过此网址接收令牌:     https://login.microsoftonline.com/our_tenant/oauth2/v2.0/token 和身体看起来像这样:

"client_id=app_id&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&client_secret=app_secret_key&grant_type=client_credentials"

使用此链接发送邮件:

https://graph.microsoft.com/v1.0/users/user_Email/sendMail

在身体json中使用电子邮件对象。

当我们通过此方法发送电子邮件时,会收到回复代码' 403'带有文字"访问被拒绝。检查凭据,然后重试。"

在测试之前,我们已经为开发此集成创建了试用帐户。通过试用帐户,这个过程非常完美 你能帮忙解决当前的问题吗?也许我们已经忘记了某些事情或帐户存在问题。

祝你好运

2 个答案:

答案 0 :(得分:1)

每当你遇到这样的问题,你有一个令牌并且你认为你应该有权访问某些东西,但是API返回403时,第一步应该是解析访问令牌。您可以使用https://jwt.io(或任何其他JWT解析器)。您想确认以下内容:

  • aud声明设置为https://graph.microsoft.com
  • tid声明是与Office 365租户的租户ID匹配的GUID
  • 仅限应用令牌(或者您调用它,"无需用户访问"):roles声明是您的范围数组期望。在您的情况下,它应包括Mail.Send
  • 对于委派访问令牌(不是您的情况,但为了完整性而包含在此处):scp声明是包含您期望的范围的字符串。

我的猜测是,您可能拥有一个完全没有roles声明的令牌,如果管理员未提供同意,将会发生这种情况。您可以通过查看this section of the Azure article on client credential flow来解决此问题。

答案 1 :(得分:0)

为了完整起见,除了 @Jason Johnston 提供的答案之外,对于仍然像我一样遇到问题的未来用户,请注意以下几点:

奖金

  • 对于解析令牌,以下网站提供了更多信息:https://jwt.ms
  • 要验证您的应用程序,请尝试改用 Postman 或 cURL。获取 cURL 参数的一种快速方法是通过在 Graph Explorer 上发送触发 `sendMail 查询,然后将 HTTP 请求复制为 cURL(如果您的浏览器支持)(见下文)。

Quick cURL from Browser