使用客户端凭据流(守护程序)访问Microsoft Graph API时,“租户guid的租户...不存在”

时间:2019-11-27 19:11:20

标签: microsoft-graph microsoft-graph-mail

我想从控制台应用程序定期访问Microsoft Graph,以便将邮件从Outlook邮箱复制到数据库。 为了以编程方式进行身份验证,我不得不使用Microsoft Graph的“客户端凭据流”。

这些是我必须采取的步骤:

  1. 在Azure门户中注册一个应用并为其创建客户端密钥。
  2. 添加我需要的所有权限并授予他们访问权限:

    Add needed permissions and grant them admin access

  3. 让管理员通过首次访问来确认这些权限。使用以下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
    

    (该范围可能解释了稍后在此描述的问题:为什么我在配置了13种不同的权限后只得到User.Read?)

    confirm permissions using admin credentials

  4. 获取访问令牌(成功!):

    Access token obtained

  5. 尝试读取用户(成功):

    users list obtained with success

  6. 尝试阅读我自己的电子邮件(没有成功):

    no luck with own emails

  7. 尝试阅读别人的电子邮件(已邀请用户以访客身份访问该应用,但仍然没有成功):

    no luck trying to read guest's emails

我不明白为什么我不能阅读消息,但我可以阅读用户。看来权限已被完全忽略(我确认我不需要任何权限来读取用户)。

更新

这是我的房客姓名:

enter image description here

这些是添加到租户的用户:

enter image description here

重要:我的Azure AD中没有Office 365订阅。所有这些电子邮件都属于不同的广告。

上一个问题"The tenant for tenant guid does not exist" even though user is listed on users endpoint?与我的问题相似,但是我相信这不是重复的,因为我的问题略有不同,并且建议的解决方案使用OAuth1(我正在使用OAuth2)。 < / p>

3 个答案:

答案 0 :(得分:2)

/ me无法使用客户端凭据令牌。 /我指的是什么?没有用户参与,因此它毫无意义。

对于第二个问题,此用户的租户中是否有一个Exchange Online邮箱?

答案 1 :(得分:2)

Microsoft Graph只能 访问经过身份验证的租户中的数据。这意味着您不能从另一个租户访问邮箱,即使该用户是您通过身份验证的租户中的访客。允许这样做将违反AAD / O365租户中数据隔离的基本原则。

还必须注意AAD / O365和Outlook.com是不同的平台。 Microsoft Graph的核心价值支柱是跨AAD和MSA的通用API层,但在幕后,它们正在调用不同的后端。

除了数据隔离和这些不同的平台之外,Outlook.com根本不支持应用程序权限(Client Credentials)。您只能使用委派权限访问Outlook.com,甚至只能使用limited set of scopes are supported

  

并非所有权限都对Microsoft帐户以及工作或学校帐户均有效。您可以检查每个权限组的“ Microsoft帐户支持”列,以确定特定的权限对Microsoft帐户,工作帐户或学校帐户或两者均有效。

关于包括哪些范围,我怀疑这里的问题是您在此租户中没有O365许可证。如果允许您未经订阅同意,那么(理论上)这可能导致应用程序在以后添加订阅时意外收到许可。就是说,如果不看返回的实际令牌的例子就很难说(可以随意发给你们其中一个希望我进一步研究的内容)。

最后,对于/mejuunas也正确。 /me段是“当前经过身份验证的用户”的别名。由于您在使用客户端凭据时不对用户进行身份验证,因此/me实际上是null

答案 2 :(得分:0)

可接受的答案是帮助我解决问题的答案。但是,我结束了测试加入所需的测试: Office 365 Developer Program (free)

此程序将允许您创建最多包含25个电子邮件帐户的Azure Active Directory。它还允许您创建16个虚拟电子邮件帐户,其中包含电子邮件(通过单击一个按钮)。您可以免费使用此基础架构90天。