我正在尝试通过管理员帐户将邮件发送到企业用户的邮箱中。
在我的应用中,我具有以下权限:
我使用https://login.microsoftonline.com/common/adminconsent?...
授予应用程序读取所有邮箱中邮件的权限,然后,我使用OAuth2身份验证来获取Bearer令牌。
这是我从令牌端点得到的响应:
{
"token_type": "Bearer",
"scope": "Mail.Read User.Read User.Read.All profile openid email",
"access_token": "<token>",
"expires_in": 3599,
"ext_expires_in": 3599
}
当我使用它通过https://graph.microsoft.com/v1.0/users/USER-ID/messages
访问邮箱时,收到以下响应
{
"error": {
"code": "ErrorAccessDenied",
"message": "Access is denied. Check credentials and try again.",
"innerError": {
"request-id": "a31bcf73-4bd6-4fed-bfee-d70328e0703e",
"date": "2018-11-26T15:20:37"
}
}
}
但是,当我将此端点与经过身份验证的管理员帐户的用户ID一起使用时,我可以访问该邮箱中的消息。
但是我想通过Microsoft Graph访问组织中所有用户的邮箱。
答案 0 :(得分:0)
Outlook终结点的操作与大多数Graph终结点略有不同,它们的作用域(即.all
与user.read
的范围没有user.read.all
的变化,它取决于哪个范围类型(委托与应用)。
使用委派作用域时,Mail.Read
仅提供对经过身份验证的用户的邮箱的访问(唯一的例外是与该用户明确共享的那些邮箱)。
使用应用程序范围时,Mail.Read
提供对任何用户邮箱的访问权限。
现在,事情变得有些古怪了,应用范围的类型完全取决于用于获取令牌的OAuth授权。
因此,为了使您能够通过/v1.0/users/{someUser}/messages
访问任何用户的邮箱,您首先需要使用“客户端证书OAuth”授权来获取令牌。您可以在"Get access without a user"下的文档中找到有关此工作原理的演练。