如何通过Azure AD API获取所有唯一权限并分配给服务主体?
关于Azure AD权限API的两个问题解答
1. 获取Azure AD中的所有唯一权限
没有直接返回“所有权限”的单一API端点,因为权限是**隶属于各个资源应用(即提供权限的服务主体)**的,比如Microsoft Graph、Azure Storage等各自有自己的权限集合。你可以通过以下方式收集全量权限:
- 首先获取所有资源类型的服务主体(过滤掉客户端类型的服务主体):
GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=servicePrincipalType eq 'Application' or servicePrincipalType eq 'ManagedIdentity' - 对每个服务主体,分别获取其委派权限(oauth2PermissionScopes)和应用权限(appRoles):
# 获取委派权限 GET https://graph.microsoft.com/v1.0/servicePrincipals/{resourceServicePrincipalId}/oauth2PermissionScopes # 获取应用权限 GET https://graph.microsoft.com/v1.0/servicePrincipals/{resourceServicePrincipalId}/appRoles
收集这些结果后去重,就能得到所有唯一权限的声明值。
2. 给服务主体分配权限
根据权限类型(应用权限/委派权限),有对应的Microsoft Graph API:
应用权限(App Roles)分配
使用appRoleAssignments端点,将资源应用的角色分配给目标服务主体:
POST https://graph.microsoft.com/v1.0/servicePrincipals/{targetServicePrincipalId}/appRoleAssignments Content-Type: application/json { "principalId": "{targetServicePrincipalId}", "resourceId": "{resourceServicePrincipalId}", "appRoleId": "{appRoleIdFromResource}" }
principalId:要分配权限的服务主体IDresourceId:提供该权限的资源服务主体IDappRoleId:目标权限的ID(从资源服务主体的appRoles中获取)
委派权限(OAuth2 Permission Scopes)分配
使用oauth2PermissionGrants端点,为服务主体分配委派权限(需管理员同意):
POST https://graph.microsoft.com/v1.0/oauth2PermissionGrants Content-Type: application/json { "clientId": "{targetServicePrincipalId}", "consentType": "AllPrincipals", "resourceId": "{resourceServicePrincipalId}", "scope": "User.Read Mail.Send" # 多个权限用空格分隔 }
或者使用新版端点(推荐):
POST https://graph.microsoft.com/v1.0/servicePrincipals/{targetServicePrincipalId}/oauth2PermissionGrants Content-Type: application/json { "resourceId": "{resourceServicePrincipalId}", "scope": "User.Read Mail.Send" }
内容的提问来源于stack exchange,提问作者Deepanshu Suneja
相关产品推荐
相关产品推荐

