深陷委派和应用程序权限

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

我已经撞墙好几天了。我有一个设置,其中有一个 CSP/CPV/MSP 租户(我们称之为租户 A),它通过合作伙伴中心管理 3 个租户 B、C 和 D。 (GDAP 设置已完成,所有 3 个租户均具有向 AdminAgents 安全组提供的全局管理员权限) 我希望能够自动化管理 3 个托管租户的资源。

我已经在开发人员租户(我们称之为租户 X)中注册了一个具有相当多的 Graph API 权限和合作伙伴中心 API 的 user_impersonation 权限的应用程序,以及用于身份验证的客户端密钥。我同意使用 CSP 租户(租户 A)的管理员用户帐户,并且在 CSP 租户中创建注册应用程序的服务主体,没有任何麻烦(授权代码流)。

接下来,我使用 CSP 同意 URL(此处)在托管租户 B 中为应用程序创建一个服务主体。这也是成功的,但这只能让我为生成的服务主体提供委派权限。我向租户 B 中的服务主体提供以下委派权限。

"Directory.ReadWrite.All", // Read and write directory data (e.g., users, groups)
"AppRoleAssignment.ReadWrite.All", // Read and write app role assignments 

但是,对于我的用例,我需要在托管租户(租户 B)中提供此服务主体,并具有相当多的应用程序权限。所以我的问题实际上非常简单,如何使用我的应用程序必须在具有应用程序权限(例如 User.ReadWrite.All、Directory.ReadWrite.All 等)的托管租户租户 B 内提供其服务主体的这些委派权限。我不想同意使用托管租户的管理员帐户,因为这确实违背了自动化的目的。

还有一个常见问题,客户端凭证流用于生成访问令牌,其范围是使用应用程序拥有的应用程序权限。我应该如何生成范围为使用应用程序的委托权限的访问令牌(当然不需要用户交互)?

在这方面的任何帮助将不胜感激。

azure microsoft-graph-api msal
1个回答
0
投票

注意:如果您想在自动化中使用这些权限,您将需要获得每个托管租户(B、C、D)中应用程序权限的管理员同意。不幸的是,在维护 Microsoft Entra ID 安全模型的同时,无法绕过此要求。

    当应用程序在没有用户上下文的情况下自行操作时,将使用
  • 应用程序权限权限。他们需要管理员同意并可以访问租户中的所有数据。
  • 当应用程序代表用户执行操作时,将使用
  • 委派权限。它们需要用户同意,并且仅限于登录用户拥有的权限。

未经创建服务主体的租户的管理员同意,无法授予应用程序权限。这意味着未经管理员同意,您无法使用委派权限向租户 B 中的服务主体授予应用程序权限。

即使您正在自动化该过程,您仍然需要管理员同意才能允许应用程序跨租户使用这些权限。这是通过

adminconsent
URL 完成的:

https://login.microsoftonline.com/TenantBTenantID/adminconsent?client_id=ClientID

enter image description here

否则,使用多租户应用程序并通过合作伙伴中心在您管理的所有租户(租户 B、C、D)之间动态请求权限。

enter image description here

用于委派权限的访问令牌(无需用户交互)

  • 委托权限需要用户同意才能允许应用程序代表用户执行操作。
  • 要生成范围为委派权限的访问令牌而无需用户交互,您通常需要使用 OAuth 2.0 代表 (OBO) 流程。
  • 此流程允许您的应用程序代表已登录的用户获取下游 API 的访问令牌。但是,这仍然需要至少一次用户交互才能获取初始令牌。
© www.soinside.com 2019 - 2024. All rights reserved.