如何通过管理员同意v2端点授予Microsoft Graph应用程序权限
Azure AD V2管理员同意端点授予应用程序权限的可行方案
问题根因
你之前直接指定https://graph.microsoft.com/Mail.Read作为scope触发委托权限同意,是因为V2管理员同意端点默认将单权限scope识别为委托权限请求,不会匹配你预配置的应用程序权限。
可行方案
方案1:标准.default scope方案(官方推荐)
这是目前唯一通过V2管理员同意端点稳定授予应用程序权限的方案,操作步骤如下:
- 第一步:进入Azure门户的应用注册页面,在「API 权限」菜单下,提前添加所有你需要授予的应用程序权限,删除不需要的多余权限,保存配置
- 第二步:构造管理员同意URL时,scope参数固定填写对应API的
.default后缀路径,示例如下(以Microsoft Graph为例):
https://login.microsoftonline.com/<你的租户ID>/v2.0/adminconsent?client_id=<你的应用客户端ID>&scope=https://graph.microsoft.com/.default&redirect_uri=<你配置的重定向URI>&state=<自定义状态值>
- 第三步:租户管理员访问该URL完成同意后,所有你预配置的应用程序权限都会被正确授予,不会出现转为委托权限的问题。
方案2:多应用拆分适配动态权限需求
如果你需要针对不同场景授予不同的应用权限组合,不想每次都同意所有预配置权限,可以按如下逻辑处理:
- 按权限集创建多个独立的应用注册,每个应用只配置对应场景需要的应用程序权限
- 每个应用单独使用对应的
.defaultscope构造同意URL,触发对应权限集的同意
注意事项
- 目前Azure AD V2管理员同意端点不支持直接传入单个应用权限的scope值触发单独同意,所有应用权限的同意请求都必须通过
.defaultscope触发 - 如果需要调用其他非Microsoft Graph的API,只需要将scope参数中的资源URI替换为对应API的根路径即可,比如自定义企业API的scope格式为
api://<自定义API的客户端ID>/.default
内容的提问来源于stack exchange,提问作者Piyumi Nadeeshani
相关产品推荐
相关产品推荐

