microsoft-graph-api - 使用 microsoft graph api 代表企业中的用户阅读邮件
问题描述
我正在尝试通过管理员帐户获取企业用户邮箱中的消息。
在我的应用程序中,我具有以下权限:
我使用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 访问组织中所有用户的邮箱。
解决方案
Outlook 端点的运行方式与大多数 Graph 端点稍有不同,而不是.all
它们的范围(即user.read
vs user.read.all
)有所不同,它取决于所使用的范围类型(委托与应用程序)。
使用委托范围时,Mail.Read
仅提供对经过身份验证的用户邮箱的访问权限(唯一的例外是已与该用户显式共享的邮箱)。
当使用应用程序范围时,Mail.Read
提供对任何用户邮箱的访问。
现在,事情变得有些奇怪了,所应用的范围类型完全取决于用于获取令牌的 OAuth 授权。
- 使用隐式或授权代码授权时,将应用委托范围。
- 使用客户端凭据授权时,应用程序范围。
因此,为了让您通过 访问任何用户的邮箱/v1.0/users/{someUser}/messages
,您首先需要使用 Client Credentials OAuth 授权获取您的令牌。您可以在"Get access without a user"下的文档中找到有关其工作原理的演练。
推荐阅读
- java - 我尝试使用 selenium 和 java 通过谷歌应用程序自动注册。它的注册,但我在控制台中遇到了一些错误
- linux - 使用不同的参数重新运行相同的命令
- go - 单变量表达式求值的结果是什么
- javascript - 如何将禁用提交按钮从 jQuery 转换为 alpinejs?
- arrays - 难以理解高级指针算术语法
- java - 使用数组列表时如何使用超类方法?
- javascript - 上传html文件并在上传前在thymeleaf中显示html文件预览
- python - 在 Windows 10 上为 python 3.8 安装 pip 的问题
- ios - 在 SwiftUI 中使用 FileManager 列出文档
- docker - 尝试使用 docker 容器启动 eureka 和配置服务器