解决多租户Azure AD应用访问Microsoft Graph API的"invalid hostname for this tenancy"错误
核心原因
该错误的本质是请求使用的访问令牌所属租户与目标SharePoint站点的租户不匹配,或是Sites.Selected权限未完成针对租户B目标站点的具体授权。
解决步骤
1. 确保获取租户B专属的访问令牌
多租户应用调用Graph API时,必须针对目标租户生成令牌:
- 获取令牌时,将
tenant参数指定为租户B的租户ID或域名(示例请求地址:https://login.microsoftonline.com/{tenantB-id}/oauth2/v2.0/token),禁止使用common或租户A的ID。 - 解析令牌内容,确认
tid字段为租户B的租户ID,aud字段为https://graph.microsoft.com,且scp或roles中包含Sites.Selected权限。
2. 完成租户B目标站点的权限授权
Sites.Selected权限需要单独对目标站点授予应用访问权限,仅租户管理员同意全局权限无法生效:
- 使用租户B的管理员账号,调用以下Graph API为应用授权:
POST https://graph.microsoft.com/v1.0/sites/{site-id}/permissions Content-Type: application/json { "roles": ["write"], // 根据业务需求选择read/write等权限 "grantedToIdentities": [{ "application": { "id": "你的多租户应用ID", "displayName": "你的应用名称" } }] } - 调用
GET https://graph.microsoft.com/v1.0/sites/{site-id}/permissions验证,确认返回结果中存在你的应用权限条目。
3. 校验站点访问端点参数的正确性
检查/sites/{hostName}:{serverRelativePath}的参数是否符合要求:
hostName必须是租户B的SharePoint站点域名(例如contoso.sharepoint.com),不能使用租户A的域名。serverRelativePath需以/sites/开头(例如/sites/TargetTeamSite),根站点可直接使用/。
4. 确认租户B中企业应用的状态
- 登录租户B的Azure AD后台,找到对应的企业应用,确认
Sites.Selected权限已被授予且状态为“已同意”。 - 检查企业应用未被禁用,且权限范围覆盖所需的站点操作。
内容的提问来源于stack exchange,提问作者Selmir Aljic
相关产品推荐
相关产品推荐

