本文介绍如何在 Microsoft Entra ID 中向应用程序授予租户范围的管理员同意。 若要了解如何配置单个用户同意设置,请参阅 配置最终用户如何同意应用程序。
向应用程序授予租户范围的管理员同意时,将代表整个组织向应用程序授予所请求的访问权限。 代表组织授予管理员同意是一项敏感操作,可能会允许应用程序的发布者访问某些重要的组织数据,或获得执行高特权操作的权限。 此类操作的示例可能包括:角色管理、对所有邮箱或所有站点的完全访问权限以及完全用户模拟。 因此在授予同意之前,需要仔细查看应用程序请求的权限。
默认情况下,向应用程序授予租户范围的管理员同意会允许所有用户访问应用程序,除非另有限制。 若要限制哪些用户可以登录到应用程序,请将应用配置为 要求用户分配 ,然后将 用户或组分配给应用程序。
重要
授予租户范围的管理员同意可能会撤销已授予该应用程序的租户范围的权限。 用户已代表自己授予的权限不会受到影响。
先决条件
若要授予租户范围的管理员同意,你需要作为经授权代表组织同意的用户登录。
若要授予租户范围的管理员同意,需要:
具有以下角色之一的 Microsoft Entra 用户帐户:
- 特权角色管理员,可对请求任何 API 的任何权限的应用授予同意。
- 云应用程序管理员或应用程序管理员,用于为请求任何 API 的任何权限的应用授予同意,除了 Microsoft Graph 应用角色(应用程序权限)。
- 一个自定义目录角色,该角色包含 授予应用程序权限的权限(应用程序所需的权限)。
在“企业应用”窗格中授予租户范围的管理员同意
如果已在租户中预配应用程序,则可以通过 “企业应用程序 ”窗格授予租户范围的管理员同意。 例如,如果至少一名用户同意某个应用程序,则可以在租户中预配该应用。 有关详细信息,请参阅 如何将应用程序添加到 Microsoft Entra ID 和原因。
要向“企业应用程序”窗格中列出的应用授予租户范围的管理员同意,请执行以下操作:
- 以至少云应用程序管理员身份登录到 Microsoft Entra 管理中心。
- 浏览到 Entra ID>企业应用>所有应用。
- 在“搜索”框中输入现有应用程序的名称,然后从搜索结果中选择该应用程序。
- 在“安全性”下选择“权限”。
- 仔细查看应用程序所需的权限。 如果同意应用程序所需的权限,请选择“授予管理员同意”。
在“应用注册”窗格中授予管理员同意
可以在 Microsoft Entra 管理中心的“应用注册”中对组织直接在 Microsoft Entra 租户中开发和注册的应用程序授予租户范围的管理员同意。
若要通过“应用注册”授予租户范围的管理员许可:
- 在 Microsoft Entra 管理中心,浏览到 Entra ID>应用注册>所有应用程序。
- 在“搜索”框中输入现有应用程序的名称,然后从搜索结果中选择该应用程序。
- 在“管理”下选择 API 权限。
- 仔细查看应用程序所需的权限。 如果同意,请选择“授予管理员同意”。
构建用于授予租户范围的管理员许可的 URL
使用上一部分所述的任一方法授予租户范围的管理员同意时,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身份平台上的管理员同意。
使用 Microsoft Graph PowerShell 为委托的权限授予管理员同意
在本节中,你将向应用程序授予委托的权限。 委托的权限是应用程序代表登录用户访问 API 所需的权限。 权限由资源 API 定义,并授予企业应用程序(即客户端应用程序)。 此同意是代表所有用户授予的。
在以下示例中,资源 API 是对象 ID aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
的 Microsoft Graph。 Microsoft Graph API 定义委托的权限、User.Read.All
和 Group.Read.All
。 consentType 为 AllPrincipals
,表示你代表租户中的所有用户表明同意。 客户端企业应用程序的对象 ID 为 aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
。
注意
请注意! 以编程方式授予的权限不需要评审或确认。 它们会立即生效。
连接到 Microsoft Graph PowerShell,并至少以 云应用程序管理员身份登录。
Connect-MgGraph -Scopes "Application.ReadWrite.All", "DelegatedPermissionGrant.ReadWrite.All"
检索由你的租户应用程序中的 Microsoft Graph(资源应用程序)定义的所有委托权限。 确定需要授予客户端应用程序的委托的权限。 在此示例中,委托的权限为
User.Read.All
和Group.Read.All
Get-MgServicePrincipal -Filter "displayName eq 'Microsoft Graph'" -Property Oauth2PermissionScopes | Select -ExpandProperty Oauth2PermissionScopes | fl
通过运行以下请求向客户端企业应用程序授予委托的权限。
$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
通过运行以下请求,确认你已在租户范围内授予管理员同意。
Get-MgOauth2PermissionGrant -Filter "clientId eq '00001111-aaaa-2222-bbbb-3333cccc4444' and consentType eq 'AllPrincipals'"
使用 Microsoft Graph PowerShell 为应用程序权限授予管理员同意
在本节中,你将向企业应用程序授予应用程序权限。 应用程序权限是应用程序访问资源 API 所需的权限。 权限由资源 API 定义,并授予企业应用程序(即主体应用程序)。 向应用程序授予访问资源 API 的权限后,该应用程序将作为后台服务或守护程序运行,而无需登录用户。 应用程序权限也称为应用角色。
在以下示例中,向 Microsoft Graph 应用程序(ID aaaaaaaa-bbbb-cccc-1111-222222222222
的主体)授予 ID df021288-bdef-4463-88db-98f22de89214
的一个应用角色(应用程序权限),该角色由 ID 11112222-bbbb-3333-cccc-4444dddd5555
的资源 API 公开。
连接到 Microsoft Graph PowerShell,并至少以 特权角色管理员身份登录。
Connect-MgGraph -Scopes "Application.ReadWrite.All", "AppRoleAssignment.ReadWrite.All"
检索由你的租户中的 Microsoft Graph 定义的应用角色。 确定需要授予客户端企业应用程序的应用角色。 在此示例中,应用角色 ID 为
df021288-bdef-4463-88db-98f22de89214
。Get-MgServicePrincipal -Filter "displayName eq 'Microsoft Graph'" -Property AppRoles | Select -ExpandProperty appRoles |fl
运行以下请求以向主体应用程序授予应用程序权限(应用角色)。
$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 资源管理器 授予委派权限和应用程序权限。
使用 Microsoft Graph API 为委托的权限授予管理员同意
在本节中,你将向应用程序授予委托的权限。 委托的权限是应用程序代表登录用户访问 API 所需的权限。 权限由资源 API 定义,并授予企业应用程序(即客户端应用程序)。 此同意是代表所有用户授予的。
至少需要以 云应用程序管理员身份登录。
在以下示例中,资源 API 是对象 ID aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
的 Microsoft Graph。 该 Microsoft Graph API 定义了委托的权限 User.Read.All
和 Group.Read.All
。 consentType 为 AllPrincipals
,表示你代表租户中的所有用户表明同意。 客户端企业应用程序的对象 ID 为 aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
。
注意
请注意! 以编程方式授予的权限不需要评审或确认。 它们会立即生效。
检索由你的租户应用程序中的 Microsoft Graph(资源应用程序)定义的所有委托权限。 确定需要授予客户端应用程序的委托的权限。 在此示例中,委托的权限为
User.Read.All
和Group.Read.All
GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq 'Microsoft Graph'&$select=id,displayName,appId,oauth2PermissionScopes
通过运行以下请求向客户端企业应用程序授予委托的权限。
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" }
通过运行以下请求,确认你已在租户范围内授予管理员同意。
GET https://graph.microsoft.com/v1.0/oauth2PermissionGrants?$filter=clientId eq '00001111-aaaa-2222-bbbb-3333cccc4444' and consentType eq 'AllPrincipals'
使用 Microsoft Graph API 为应用程序权限授予管理员同意
在本节中,你将向企业应用程序授予应用程序权限。 应用程序权限是应用程序访问资源 API 所需的权限。 权限由资源 API 定义,并授予企业应用程序(即主体应用程序)。 向应用程序授予访问资源 API 的权限后,该应用程序将作为后台服务或守护程序运行,而无需登录用户。 应用程序权限也称为应用角色。
在以下示例中,向应用程序 Microsoft Graph(ID 00001111-aaaa-2222-bbbb-3333cccc4444
的主体)授予 ID df021288-bdef-4463-88db-98f22de89214
的一个应用角色(应用程序权限),该角色由 ID 11112222-bbbb-3333-cccc-4444dddd5555
的资源企业应用程序公开。
至少需要以 特权角色管理员身份登录。
检索由你的租户中的 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
运行以下请求以向主体应用程序授予应用程序权限(应用角色)。
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" }