我想从控制台应用程序定期访问 Microsoft Graph,以便将邮件从 Outlook 邮箱复制到数据库。为了以编程方式进行身份验证,我不得不使用 Microsoft Graph 的“客户端凭据流”。
这些是我必须采取的步骤:
- 在 Azure 门户中注册一个应用程序并为其创建一个客户端密码。
添加我需要的所有权限并授予他们访问权限:
让管理员通过首次访问来确认这些权限。这是使用以下 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
我收到以下回复:
admin_consent: True tenant: ca566779-1e7b-48e8-b52b-68********** state: 12345 scope**: scope: https://graph.microsoft.com/User.Read https://graph.microsoft.com/.default
(范围可能会解释这里稍后描述的问题:为什么我只有
User.Read
在配置了 13 个不同的权限时才能得到??)获取访问令牌(成功!):
尝试阅读用户(成功):
尝试阅读我自己的电子邮件(没有成功):
尝试阅读其他人的电子邮件(用户被邀请以访客身份访问应用程序,但仍然没有成功):
我不明白为什么我不能阅读消息,但我可以阅读用户。似乎权限被完全忽略了(我确认我不需要任何权限来读取用户)。
更新
这是我的租户名称:
这些是添加到租户的用户:
重要提示:我的 Azure AD 中没有 Office 365 订阅。所有这些电子邮件都属于不同的广告。
即使用户在用户端点上列出,上一个问题“租户 guid 的租户不存在”?与我的相似,但我相信这不是重复的,因为我的问题略有不同,并且建议的解决方案使用 OAuth1(我使用的是 OAuth2)。