Microsoft graph api &引用;租户guid的租户。。。“不存在”;使用客户端凭据流(守护进程)访问Microsoft Graph API时

Microsoft graph api &引用;租户guid的租户。。。“不存在”;使用客户端凭据流(守护进程)访问Microsoft Graph API时,microsoft-graph-api,microsoft-graph-mail,Microsoft Graph Api,Microsoft Graph Mail,我希望定期从控制台应用程序访问Microsoft Graph,以便将邮件从Outlook邮箱复制到数据库。 为了以编程方式进行身份验证,我必须使用Microsoft Graph的“客户端凭据流” 以下是我必须采取的步骤: 在Azure门户中注册应用程序并为其创建客户端密码 添加我需要的所有权限并授予他们访问权限: 让管理员通过首次访问来确认这些权限。这是使用以下URL完成的: https://login.microsoftonline.com/{tenant}/v2.0/adminconsen

我希望定期从控制台应用程序访问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广告中没有office 365订阅。所有这些电子邮件都属于不同的广告


    前面的问题与我的问题类似,但我相信这不是重复问题,因为我的问题略有不同,建议的解决方案使用OAuth1(我使用的是OAuth2)。

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

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

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

    还需要注意的是,AAD/O365和Outlook.com是不同的平台。MicrosoftGraph的核心价值主张是跨AAD和MSA的通用API层,但在幕后,它们正在调用不同的后端

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

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

    关于包含哪些作用域,我怀疑这里的问题是您在此租户中没有O365的许可证。如果它允许你在没有订阅的情况下同意,这(理论上)可能会导致应用程序在稍后添加订阅时意外获得同意。这就是说,如果你没有看到一个你正在取回的实际代币的例子,就很难说出来(请随意发布一个你想让我进一步了解的代币)


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

    公认的答案就是帮助我的答案。然而,我最终测试了我需要测试的东西,加入了:


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

    谢谢您的回答。我试图访问的用户是我添加到租户的用户之一,但我不知道这是否回答了您的问题。我在问题的末尾添加了两个新的屏幕截图,并提供了更多细节。你觉得有什么不对吗?我无法访问3个用户的任何电子邮件…如果你的Azure AD租户中没有Office 365,则只能在你的应用程序使用v2的“公共”端点时访问Microsoft帐户电子邮件。不是带有租户id的令牌。您将获得一个位于AAD租户上下文中的令牌。因此,您正在尝试获取他们存储在您的租户中的电子邮件。我已经尝试使用“common”代替租户,但由于无法拨打任何电话(包括),我开始使用租户。你的建议让我再次测试它,我发现AdminApprove步骤中有一个问题(我以前没有注意到):我一直在搜索web,但我仍然不知道问题出在哪里。你的应用程序也需要设置为支持个人Microsoft帐户。有一个选项可以只允许您的组织、任何组织或任何组织和个人帐户。我想我有这个选项,就像在“身份验证”选项卡中一样,我可以阅读以下内容:如果我理解正确,您告诉我两件事:1-“您无法阅读Azure广告中不属于O365订阅的电子邮件”和2-“outlook.com帐户不允许所有权限”。1.令人不安,因为这正是我所需要的(我认为邀请用户作为来宾就足够了).2.不是问题,因为根据Mail.Read操作对Outlook.com帐户有效。在我授予您奖金之前,您能否确认我对您的理解正确,并且“通用”端点不是选项?如果