如何通过Microsoft Graph无交互自动授予Azure应用管理员同意?
无交互自动化Microsoft Graph管理员同意方案
前提条件
- 持有客户租户的全局管理员或应用程序管理员权限(或客户提供的对应权限服务主体)
- 已完成应用注册并配置好目标应用权限(如
Sites.Selected)
具体实现步骤
1. 获取租户管理员级访问令牌
通过服务主体凭证流(Client Credentials)获取具备权限的令牌,调用端点:
POST https://login.microsoftonline.com/{客户租户ID}/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded grant_type=client_credentials &client_id={你的应用客户端ID} &client_secret={你的应用客户端密钥} &scope=https://graph.microsoft.com/.default
2. 直接创建应用权限的管理员同意
通过Microsoft Graph的appRoleAssignments端点,直接为应用分配目标权限,完成无交互同意:
POST https://graph.microsoft.com/v1.0/servicePrincipals/{你的应用服务主体ID}/appRoleAssignments Content-Type: application/json { "principalId": "{你的应用服务主体ID}", "resourceId": "{SharePoint服务主体ID}", "appRoleId": "{Sites.Selected权限ID}" }
参数说明:
- 你的应用服务主体ID:应用在客户租户中的服务主体ID,可通过
GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '{你的应用客户端ID}'查询获取 - SharePoint服务主体ID:固定值为
00000003-0000-0ff1-ce00-000000000000 - Sites.Selected权限ID:通过
GET https://graph.microsoft.com/v1.0/servicePrincipals/{SharePoint服务主体ID}/appRoles查询,找到值为Sites.Selected的id字段
3. 验证同意状态
调用以下端点确认权限分配成功:
GET https://graph.microsoft.com/v1.0/servicePrincipals/{你的应用服务主体ID}/appRoleAssignments?$filter=resourceId eq '{SharePoint服务主体ID}'
关于待处理同意请求的说明
调用applications/{appid}端点无法看到待处理请求,是因为该端点仅展示用户手动发起的同意申请,而自动化管理员同意是通过直接分配权限完成,不会生成待处理请求记录。
批量客户处理注意事项
- 针对每个客户租户重复上述流程,确保在对应租户环境中执行令牌获取与权限分配
- 建议采用多租户应用配置,简化跨租户的服务主体创建与权限管理
- 首次处理客户租户时,可通过
GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '{你的应用客户端ID}'触发应用服务主体在客户租户中的自动创建
内容的提问来源于stack exchange,提问作者vilmarci
相关产品推荐
相关产品推荐

