【问题标题】:Office 365 API ErrorAccessDenied Access is denied when sending an emailOffice 365 API ErrorAccessDenied 发送电子邮件时拒绝访问
【发布时间】:2017-01-24 22:00:30
【问题描述】:

我们在 Azure 上有一个应用程序,经过大量工作和挫折,到目前为止我们已经能够阅读用户的电子邮件。

出于测试目的,我为应用程序提供了几乎完全访问权限(见下图)),包括但不限于代表用户发送电子邮件、阅读用户电子邮件等。我知道我们不必给予除非需要,否则应用程序进行此类访问,但这只是为了发送电子邮件。

我有这个 curl 代码用于发送电子邮件的测试目的

 curl -i https://graph.microsoft.com/v1.0/me/sendmail -H 'Content-Type: application/json' -X POST -d '{"Message":{"Subject": hi", "Body": {"ContentType": "Text", "Content": "body"},"ToRecipients":[{"EmailAddress": {"Address": "alerts-noreply@mail.windowsazure.com"}}]},"SaveToSentItems": "true"}' -H 'Authorization: Bearer eyJ......TOKEN.....YlhaHbAFQ'

它给了我这个错误

{
  "error": {
    "code": "ErrorAccessDenied",
    "message": "Access is denied. Check credentials and try again.",
    "innerError": {
      "request-id": "4895f98f-c5a4-4083-867b-f6c7b4634b7f",
      "date": "2017-01-24T21:48:47"
    }
  }
}

如果应用程序具有这样的完全访问权限,为什么应用程序会被拒绝?

令牌被以下代码获取:

   https://login.microsoftonline.com/f0263....0be3/oauth2/authorize?client_id=8a676..e4b6&redirect_uri=http://www.wrabc.com:8090/&response_type=code.

感谢您的帮助。

【问题讨论】:

  • 为了缩小这个问题的范围,我建议你解析this site的token表单,检查scp声明中是否有Mail.Send
  • @FeiXue-MSFT 我看到下面的“scp”:“Mail.ReadWrite Mail.ReadWrite.Shared MailboxSettings.ReadWrite User.Read”,没有 Mail.Send。
  • 我尝试了 POST outlook.office.com/api/v1.0/me/folders/inbox/messages(to 草稿消息),它成功了。我看到 Mail.Send 范围存在问题。我去了 Azure AD 中的权限,我可以看到所有内容都被选中,包括“以用户身份发送邮件”。在我这样做之后,检索了一个新令牌,但它仍然没有 mail.send scp。不知道我必须做什么。

标签: azure microsoft-graph-api azure-active-directory azure-ad-graph-api


【解决方案1】:

要执行发送消息的API,我们需要授予Mail.Send 权限。如果您在用户授予应用后更改权限,用户需要通过重新授予来更新权限。

另一种可能的重新授权方法是在您初始化授权请求时添加参数prompt=consent。更详细的请求参数,可以参考here

【讨论】:

  • 谢谢兄弟。 prompt=consent 使它工作。不仅如此,用户将能够看到他们将给予什么样的资助(我过去从未见过)。我希望你们已经记录了几个可以完成大部分功能的示例。东西很难找。当然,我们这边也有错误,但是文档很难指导我们完成。
【解决方案2】:

如果您在同意后添加了权限,您可以尝试为https://myapps.microsoft.com/ 的用户删除该应用或注册一个新应用吗?然后再次登录并给予同意。这应该会更新令牌的 scp。

【讨论】:

  • 没有删除按钮。只报告问题并获取信息。
  • 我可以手动更新 scp 吗?像清单文件或类似的东西?
  • 您是否在 portal.office.com 上获得了删除选项?点击右上角你的名字,选择“查看账户”,然后选择“应用权限”。如果您在其他对话框中看不到它,我不知道您是否会在此处获得该选项,但我认为这是可能的。
  • 感谢您的澄清。这是我看到的:您无法撤销对这些应用程序的权限您无法撤销权限,因为这是作为订阅或管理员角色的一部分分配给您的。
  • 我在注册应用程序时有什么问题吗?
猜你喜欢
  • 2015-01-10
  • 1970-01-01
  • 2016-02-04
  • 2017-04-06
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多