如何通过Graph API实现跨租户用户委托访问SharePoint?
你的需求完全可行,以下是关键配置和实现要点:
租户A应用配置
- 租户A的前端(Angular/Node.js/Express)和后端(C# Web API)对应的Azure AD应用,需配置跨租户支持:
- 将应用的账户类型设置为「任何组织目录中的账户」,或「特定组织目录中的账户」并添加租户B的ID到允许列表。
- 添加针对Microsoft Graph的用户委托权限(如
Sites.Read.All、Sites.ReadWrite.All等,按需选择),权限的目标租户为租户B。
- 确保应用已获得权限同意:可由租户B的管理员进行管理员同意,或由租户A的来宾用户在首次访问时完成用户同意。
租户B侧配置
- 确认租户A的来宾用户已拥有目标SharePoint站点的对应权限(如站点成员、编辑权限),用户委托令牌会直接沿用该用户的实际站点权限。
- 无需单独使用租户B创建的AD应用,所有权限请求和令牌获取都通过租户A的应用完成。
令牌获取流程
- 前端通过MSAL登录租户A后,在请求访问租户B的Graph API时,需指定租户B的ID作为请求参数(或使用
common),同时携带所需的Graph API权限范围。 - 若后端需要调用Graph API,需使用On-Behalf-Of (OBO) 流程:前端将授权码或ID Token传给租户A的后端,后端以此向Azure AD请求租户B的Graph API访问令牌,实现用户委托的权限传递。
常见问题排查
- 若令牌获取失败,检查租户A的应用是否已添加正确的跨租户用户委托权限,且已完成权限同意。
- 验证来宾用户在租户B中是否能直接访问目标SharePoint站点,权限不足会导致Graph API调用被拒绝。
- 确认MSAL请求中的租户ID、权限范围参数是否正确,避免因参数错误导致令牌无效。
内容的提问来源于stack exchange,提问作者shinon
相关产品推荐
相关产品推荐

