作为具有委派管理员权限的合作伙伴,以非交互方式向应用程序授予管理员同意

问题描述 投票:0回答:1

我想通过 Microsoft Graph API(客户端凭据流)从多个客户租户获取数据。 因此,我在我的租户中注册了一个多租户应用程序。 目前,我必须手动同意每个租户中的该应用程序(!)。我通过导航到“https://login.microsoftonline.com/{tenantId}/adminconsent?client_id={appId}”来执行此操作。然后使用我的合作伙伴委托的管理员帐户登录并给予同意。一切都是互动的。 当我这样做时,我的应用程序可以通过该租户中的 Microsoft Graph API 访问数据。 但这对于一群租户来说是非常乏味的。

有没有办法在代码(C#)中自动执行此操作?

c# .net microsoft-graph-api multi-tenant azure-app-registration
1个回答
0
投票

作为具有委派管理权限的合作伙伴,您可以使用合作伙伴中心 API 为客户租户中的应用程序授予管理员同意:

API 有效负载主体的示例如下所述:

例如,要授予 Microsoft Graph 委托权限 User.ReadApplication.Read.All,API 请求将如下所示:

POST https://api.partnercenter.microsoft.com/v1/customers/{customer_id}/applicationconsents
Content-Type: application/json

{
    "applicationId": "{your-app-id}",
    "applicationGrants": [
        {
            "enterpriseApplicationId":"00000003-0000-0000-c000-000000000000",
            "scope":"User.Read"
        },
        {
            "enterpriseApplicationId":"00000003-0000-0000-c000-000000000000",
            "scope":"Application.Read.All"
        }
    ]
}

地点:

  • {customer_id}
    是目标客户租户的租户ID。
  • {your-app-id}
    是您的应用程序的应用程序 ID(也称为客户端 ID)(既是您正在使用发出此 API 请求的应用程序,也是您要在目标客户的租户中授予访问权限的应用程序)。
  • 00000003-0000-0000-c000-000000000000
    是 Microsoft Graph 的应用 ID。如果您授予其他某个 API 的访问权限,则可以使用该 API 的应用程序 ID。

需要记住的一些事情:

  • 您的应用必须在 partner 租户的上下文中代表用户调用此合作伙伴中心 API(即委派访问权限)。 (目标客户租户是API请求的参数,但使用的令牌应由合作伙伴租户颁发。)
  • 调用此 API 时,登录用户必须属于在目标客户租户中被授予委派管理权限的用户组的一部分。
  • 要调用此 API,客户租户中授予登录用户的权限必须包括同意这些委派权限的权限(例如应用程序管理员、全局管理员或具有足够权限的自定义目录角色)。
  • 合作伙伴中心 API 不能用于在客户租户中授予应用角色(应用程序权限)。如果您需要在客户租户中授予应用程序角色,则需要遵循两步方法:
    • 第 1 步:使用合作伙伴中心 API 在客户租户中向您的应用授予委派权限(如上所述)。
    • 第 2 步:使用上一步中授予的委派权限,使用 Microsoft Graph(在客户的租户中)将应用角色分配给您的应用(或者可能是不同的应用,具体取决于场景)。
    • 代表 API 调用者的登录用户当然需要在目标客户租户中拥有足够的权限,才能授予相关应用程序角色(应用程序权限)。对于 Microsoft Graph 应用角色,这需要全局管理员、特权角色管理员或具有必要权限的自定义目录角色。
    • 重要:上述步骤将授予您的应用程序在目标客户租户中的永久特权访问权限。即使客户已授予您足够的委派管理员权限,您也必须仅在以下情况下执行此操作:这是您与目标客户之间的协议的明确一部分,并且您与客户清楚地了解当您委派管理员关系时此权限会发生什么情况结束了。
© www.soinside.com 2019 - 2024. All rights reserved.