azure - "User not found"用于具有客户端凭据身份验证流程的 Azure 企业应用安全组中的 Graph API 请求

标签 azure authentication azure-active-directory microsoft-graph-api

设计

design overview

目标

获取给定用户的日历事件。

要求

  1. 应用程序应有权访问 MS Graph API。
  2. 应用程序应像守护进程/后台进程一样运行,而不依赖于用户的登录。
  3. 应用程序应有权访问 Azure Active Directory (AAD) 中最少数量的用户数据。
  4. 应用程序应该能够获取用户的日历事件并创建它们。

实现/设置

  • 履行 (1) Azure(企业)应用程序已按照描述创建 here .
  • 启用 (2) 客户端凭据流与应用程序权限设置一起使用
  • 会见 (3) 个安全组 - 如所述 here - 由有限数量的用户创建,并具有包含相关权限的相关策略(请参阅 here )。该群组后来连接到应用程序 this说明。
  • 按照操作 here 的要求实现 (4) Calendar.ReadCalendar.ReadWritehere已添加到上一设置步骤中提到的策略中。

测试

使用了两个 HTTP 请求:一个用于获取 token ,另一个用于读取事件。

  1. 来自 Identity Platform 的 token 请求
curl --location --request POST 'https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token' \
--data-raw 'client_id=<APPLICATION_TOKEN>&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&client_secret=<APPLICATION_SECRET>&grant_type=client_credentials'

检查 token 后here我看到它包含所需的权限:

  "roles": [
    "Calendars.Read",
    "Calendars.ReadWrite"
  ]
  • Graph API 获取日历事件的请求
  • curl --location --request GET 'https://graph.microsoft.com/v1.0/users/<USER_ID>/calendar/events' \
    --header 'Authorization: Bearer <TOKEN>'
    

    导致以下错误:

    {
      "error": {
        "code": "ResourceNotFound",
        "message": "User not found",
        "innerError": {
          "date": "2022-02-08T08:25:39",
          "request-id": "bfaca1f9-e79b-491c-8d75-5a62317e299b",
          "client-request-id": "bfaca1f9-e79b-491c-8d75-5a62317e299b"
        }
      }
    }
    

    用户 ID 来 self 在 Azure 租户的 Azure Active Directory 详细信息中找到的帐户。添加其他用户后,我仔细检查了这一点。

    询问前调查

    This问题看起来最接近我的情况,因为它使用客户端凭据身份验证流程。但它对 AAD 中的所有用户使用全局权限,而我们使用带有安全组的更细粒度的方法。它还显示了不同的错误“无法发现资源。” 与我的情况下的“找不到用户”

    最佳答案

    为了调用/{user-id}/calendar/events 工作,如果您使用守护程序应用程序的客户端凭据,用户必须在 Exchange Online 上拥有邮箱。

    此外,似乎无法将许可证分配给 guest 帐户(在本例中为个人帐户),因此用户帐户永远无法访问日历服务(o365 在线交换的一部分),因此无法检索日历个人账户信息。

    请引用我在Q&A中类似的回答详细说明。

    关于azure - "User not found"用于具有客户端凭据身份验证流程的 Azure 企业应用安全组中的 Graph API 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71032554/

    相关文章:

    xamarin - Microsoft 身份验证库 (MSAL) 永远不会从 Android 上的 AcquireTokenAsync() 返回

    azure - 如何拒绝除某些用户之外的 Azure 中创建资源的权限

    c# - Azure Function 表示无法绑定(bind)参数

    通过 Powershell 注册 Azure AD 应用程序 : How to ensure the proper permissions?

    python - 使用azure作为Django的存储后端(使用django-storages)

    php - 使用 php 密码保护没有数据库访问权限的页面

    azure - 监控 Bing map API 请求

    node.js - fromAuthHeaderAsBearerToken 在 NODE 中不起作用

    javascript - 如何用 PHP 制作一个机器人来登录网站并在网站上做事

    azure-active-directory - 是否可以通过组成员身份设置 Azure AD 目录角色?