向应用程序授予租户范围的管理员许可

本文介绍如何在 Microsoft Entra ID 中向应用程序授予租户范围的管理员同意。 若要了解如何配置单个用户同意设置,请参阅配置最终用户同意使用应用程序的方式

向应用程序授予租户范围的管理员同意时,将代表整个组织向应用程序授予所请求的访问权限。 代表组织授予管理员同意是一项敏感操作,可能会允许应用程序的发布者访问某些重要的组织数据,或获得执行高特权操作的权限。 此类操作的示例可能包括:角色管理、对所有邮箱或所有站点的完全访问权限以及完全用户模拟。 因此在授予同意之前,需要仔细查看应用程序请求的权限。

默认情况下,向应用程序授予租户范围的管理员同意会允许所有用户访问应用程序,除非另有限制。 若要限制可登录到应用程序的用户,请将应用配置为要求用户分配,然后将用户或组分配到应用程序

重要

授予租户范围的管理员同意可能会撤销已授予该应用程序的租户范围的权限。 用户已代表自己授予的权限不会受到影响。

先决条件

若要授予租户范围的管理员同意,你需要作为经授权代表组织同意的用户登录。

若要授予租户范围的管理员同意,需要:

  • 具有以下角色之一的 Microsoft Entra 用户帐户:

    • 特权角色管理员,可对请求任何 API 的任何权限的应用授予同意。
    • 云应用程序管理员或应用程序管理员,用于为请求任何 API 的任何权限的应用授予同意,除了 Microsoft Graph 应用角色(应用程序权限)
    • 自定义目录角色,包含向应用程序授予权限的权限,用于应用程序所需的权限。

如果应用程序已在租户中预配,则可以通过“企业应用程序”窗格授予租户范围的管理员同意。 例如,如果已至少许可一个用户登录到某个应用程序,则可以在租户中预配该应用。 有关详细信息,请参阅如何以及为何将应用程序添加到 Microsoft Entra ID

提示

本文中的步骤可能因开始使用的门户而略有不同。

要向“企业应用程序”窗格中列出的应用授予租户范围的管理员同意,请执行以下操作:

  1. 至少以云应用程序管理员身份登录到 Microsoft Entra 管理中心
  2. 浏览到“标识”>“应用程序”>“企业应用程序”>“所有应用程序”。
  3. 在“搜索”框中输入现有应用程序的名称,然后从搜索结果中选择该应用程序。
  4. 在“安全性”下选择“权限”。 显示如何授予租户范围的管理员同意的屏幕截图。
  5. 仔细查看应用程序所需的权限。 如果同意应用程序所需的权限,请选择“授予管理员同意”。

可以在 Microsoft Entra 管理中心中的应用注册处授予租户范围的管理员同意,用于组织已直接在 Microsoft Entra 租户中开发和注册的应用程序。

若要通过“应用注册”授予租户范围的管理员许可:

  1. 在 Microsoft Entra 管理中心,浏览到“标识”>“应用程序”>“应用注册”>“所有应用程序”。
  2. 在“搜索”框中输入现有应用程序的名称,然后从搜索结果中选择该应用程序。
  3. 在“管理”下,选择“API 权限”。
  4. 仔细查看应用程序所需的权限。 如果同意,请选择“授予管理员同意”。

使用上一部分所述的任一方法授予租户范围的管理员同意时,Microsoft Entra 管理中心会打开一个窗口,提示授予租户范围的管理员同意。 如果你知道应用程序的客户端 ID(也称为应用程序 ID),则可以生成相同的 URL 来授予租户范围的管理员许可。

租户范围的管理员许可 URL 采用以下格式:

https://login.microsoftonline.com/{organization}/adminconsent?client_id={client-id}

其中:

  • {client-id} 是应用程序的客户端 ID(也称为应用 ID)。
  • {organization} 是你要在其中同意应用程序的租户的租户 ID 或任何经验证的域名。 可以使用值 organizations,这将导致同意发生在登录用户的主租户中。

在授予许可之前,始终请仔细查看应用程序请求的权限。

有关构造租户范围的管理员同意 URL 的详细信息,请参阅 Microsoft 标识平台上的管理员同意

在本节中,你将向应用程序授予委托的权限。 委托的权限是应用程序代表登录用户访问 API 所需的权限。 权限由资源 API 定义,并授予企业应用程序(即客户端应用程序)。 此同意是代表所有用户授予的。

在以下示例中,资源 API 是对象 ID aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb 的 Microsoft Graph。 该 Microsoft Graph API 定义了委托的权限 User.Read.AllGroup.Read.All。 consentType 为 AllPrincipals,表示你代表租户中的所有用户表明同意。 客户端企业应用程序的对象 ID 为 aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb

注意

请注意! 以编程方式授予的权限不需要评审或确认。 它们会立即生效。

  1. 连接到 Microsoft Graph PowerShell,至少以云应用程序管理员身份登录。

    Connect-MgGraph -Scopes "Application.ReadWrite.All", "DelegatedPermissionGrant.ReadWrite.All"
    
  2. 检索由你的租户应用程序中的 Microsoft Graph(资源应用程序)定义的所有委托权限。 确定需要授予客户端应用程序的委托的权限。 在此示例中,委托的权限为 User.Read.AllGroup.Read.All

    Get-MgServicePrincipal -Filter "displayName eq 'Microsoft Graph'" -Property Oauth2PermissionScopes | Select -ExpandProperty Oauth2PermissionScopes | fl
    
  3. 通过运行以下请求向客户端企业应用程序授予委托的权限。

    $params = @{
    
    "ClientId" = "00001111-aaaa-2222-bbbb-3333cccc4444"
    "ConsentType" = "AllPrincipals"
    "ResourceId" = "a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1"
    "Scope" = "User.Read.All Group.Read.All"
    }
    
    New-MgOauth2PermissionGrant -BodyParameter $params | 
    Format-List Id, ClientId, ConsentType, ResourceId, Scope
    
  4. 通过运行以下请求,确认你已在租户范围内授予管理员同意。

 Get-MgOauth2PermissionGrant -Filter "clientId eq '00001111-aaaa-2222-bbbb-3333cccc4444' and consentType eq 'AllPrincipals'" 

在本节中,你将向企业应用程序授予应用程序权限。 应用程序权限是应用程序访问资源 API 所需的权限。 权限由资源 API 定义,并授予企业应用程序(即主体应用程序)。 向应用程序授予对资源 API 的访问权限后,其将作为后台服务或守护程序运行,无需用户登录。 应用程序权限也称为应用角色。

在以下示例中,向 Microsoft Graph 应用程序(ID aaaaaaaa-bbbb-cccc-1111-222222222222 的主体)授予 ID df021288-bdef-4463-88db-98f22de89214 的一个应用角色(应用程序权限),该角色由 ID 11112222-bbbb-3333-cccc-4444dddd5555 的资源 API 公开。

  1. 连接到 Microsoft Graph PowerShell,至少以特权角色管理员身份登录。

    Connect-MgGraph -Scopes "Application.ReadWrite.All", "AppRoleAssignment.ReadWrite.All"
    
  2. 检索由你的租户中的 Microsoft Graph 定义的应用角色。 确定需要授予客户端企业应用程序的应用角色。 在此示例中,应用角色 ID 为 df021288-bdef-4463-88db-98f22de89214

    Get-MgServicePrincipal -Filter "displayName eq 'Microsoft Graph'" -Property AppRoles | Select -ExpandProperty appRoles |fl
    
  3. 运行以下请求以向主体应用程序授予应用程序权限(应用角色)。

 $params = @{
  "PrincipalId" ="aaaaaaaa-bbbb-cccc-1111-222222222222"
  "ResourceId" = "a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1"
  "AppRoleId" = "df021288-bdef-4463-88db-98f22de89214"
}

New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId 'aaaaaaaa-bbbb-cccc-1111-222222222222' -BodyParameter $params | 
  Format-List Id, AppRoleId, CreatedDateTime, PrincipalDisplayName, PrincipalId, PrincipalType, ResourceDisplayName

使用 Graph 浏览器授予委托的权限和应用程序权限。

在本节中,你将向应用程序授予委托的权限。 委托的权限是应用程序代表登录用户访问 API 所需的权限。 权限由资源 API 定义,并授予企业应用程序(即客户端应用程序)。 此同意是代表所有用户授予的。

至少需要云应用程序管理员登录。

在以下示例中,资源 API 是对象 ID aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb 的 Microsoft Graph。 该 Microsoft Graph API 定义了委托的权限 User.Read.AllGroup.Read.All。 consentType 为 AllPrincipals,表示你代表租户中的所有用户表明同意。 客户端企业应用程序的对象 ID 为 aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb

注意

请注意! 以编程方式授予的权限不需要评审或确认。 它们会立即生效。

  1. 检索由你的租户应用程序中的 Microsoft Graph(资源应用程序)定义的所有委托权限。 确定需要授予客户端应用程序的委托的权限。 在此示例中,委托的权限为 User.Read.AllGroup.Read.All

    GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq 'Microsoft Graph'&$select=id,displayName,appId,oauth2PermissionScopes
    
  2. 通过运行以下请求向客户端企业应用程序授予委托的权限。

    POST https://graph.microsoft.com/v1.0/oauth2PermissionGrants
    
    Request body
    {
       "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
       "consentType": "AllPrincipals",
       "resourceId": "a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
       "scope": "User.Read.All Group.Read.All"
    }
    
  3. 通过运行以下请求,确认你已在租户范围内授予管理员同意。

    GET https://graph.microsoft.com/v1.0/oauth2PermissionGrants?$filter=clientId eq '00001111-aaaa-2222-bbbb-3333cccc4444' and consentType eq 'AllPrincipals'
    

在本节中,你将向企业应用程序授予应用程序权限。 应用程序权限是应用程序访问资源 API 所需的权限。 权限由资源 API 定义,并授予企业应用程序(即主体应用程序)。 向应用程序授予对资源 API 的访问权限后,其将作为后台服务或守护程序运行,无需用户登录。 应用程序权限也称为应用角色。

在以下示例中,向应用程序 Microsoft Graph(ID 00001111-aaaa-2222-bbbb-3333cccc4444 的主体)授予 ID df021288-bdef-4463-88db-98f22de89214 的一个应用角色(应用程序权限),该角色由 ID 11112222-bbbb-3333-cccc-4444dddd5555 的资源企业应用程序公开。

至少需要以特权角色管理员身份登录。

  1. 检索由你的租户中的 Microsoft Graph 定义的应用角色。 确定需要授予客户端企业应用程序的应用角色。 在此示例中,应用角色 ID 为 df021288-bdef-4463-88db-98f22de89214

    GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq 'Microsoft Graph'&$select=id,displayName,appId,appRoles
    
  2. 运行以下请求以向主体应用程序授予应用程序权限(应用角色)。

    POST https://graph.microsoft.com/v1.0/servicePrincipals/11112222-bbbb-3333-cccc-4444dddd5555/appRoleAssignedTo
    
    Request body
    
    {
       "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
       "resourceId": "a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
       "appRoleId": "df021288-bdef-4463-88db-98f22de89214"
    }
    

后续步骤