发送电子邮件时拒绝Office 365 API ErrorAccessDenied Access

时间:2017-01-24 22:00:31

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

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

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

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

 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.

我知道你的帮助。

2 个答案:

答案 0 :(得分:2)

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

另一种重新授予的方法是在初始化授权请求时添加参数prompt=consent。有关请求中参数的更多详细信息,请参阅here

答案 1 :(得分:1)

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