Lui*_*eia 5 microsoft-graph-mail microsoft-graph-api
我想从控制台应用程序定期访问 Microsoft Graph,以便将邮件从 Outlook 邮箱复制到数据库。为了以编程方式进行身份验证,我必须使用 Microsoft Graph 的“客户端凭据流程”。
这些是我必须采取的步骤:
添加我需要的所有权限并授予他们访问权限:
让管理员通过首次访问来确认这些权限。这是使用以下 URL 完成的:
https://login.microsoftonline.com/{tenant}/v2.0/adminconsent
?client_id={app id}
&state=1234
&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient
&scope=https://graph.microsoft.com/.default
Run Code Online (Sandbox Code Playgroud)
我收到以下回复:
admin_consent: True
tenant: ca566779-1e7b-48e8-b52b-68**********
state: 12345
scope**: scope: https://graph.microsoft.com/User.Read https://graph.microsoft.com/.default
Run Code Online (Sandbox Code Playgroud)
(作用域可能解释了这里稍后描述的问题:为什么我只有User.Read在配置了 13 个不同的权限时才得到?)
获取访问令牌(成功!):
尝试读取用户(成功):
尝试阅读我自己的电子邮件(没有成功):
尝试阅读其他人的电子邮件(用户被邀请以访客身份访问该应用程序,但仍然没有成功):
我不明白为什么我无法读取消息,但可以读取用户。看来权限被完全忽略了(我确认我不需要任何权限来读取用户)。
更新
这是我的租户姓名:
这些是添加到租户的用户:
重要提示:我的 Azure AD 中没有 Office 365 订阅。所有这些电子邮件都属于不同的 AD。
即使用户在用户端点上列出,上一个问题“租户 GUID 的租户不存在”?与我的类似,但我相信这不是重复的,因为我的问题略有不同,并且建议的解决方案使用 OAuth1 (我正在使用 OAuth2)。
Microsoft Graph 只能访问已通过身份验证的租户内的数据。这意味着您无法访问其他租户的邮箱,即使该用户是您通过身份验证的租户中的来宾。允许这样做将违反 AAD/O365 租户中数据隔离的基本原则。
还需要注意的是,AAD/O365 和 Outlook.com 是不同的平台。Microsoft Graph 的核心价值支柱是跨 AAD 和 MSA 的通用 API 层,但在幕后,它们正在调用不同的后端。
除了数据隔离和这些不同的平台之外,Outlook.com 根本不支持应用程序权限(客户端凭据)。您只能使用委派权限访问 Outlook.com,甚至仅支持一组有限的范围:
并非所有权限都对 Microsoft 帐户和工作或学校帐户有效。您可以检查每个权限组的“支持的 Microsoft 帐户”列,以确定特定权限是否对 Microsoft 帐户、工作或学校帐户或两者都有效。
关于包含哪些范围,我怀疑这里的问题是您在此租户中没有 O365 的许可证。如果它允许您在没有订阅的情况下同意,这可能(理论上)导致应用程序在/如果稍后添加订阅时意外收到同意。也就是说,如果没有看到您要返回的实际令牌的示例,就很难判断(请随意发布您希望我进一步研究这一问题的人之一)。
最后,juunas关于 的观点也是正确的/me。该/me段是“当前经过身份验证的用户”的别名。由于您在使用客户端凭据时并未对用户进行身份验证,/me因此实际上是这样null。
| 归档时间: |
|
| 查看次数: |
3928 次 |
| 最近记录: |