在这种情况下:
“XX”代表我们的应用程序。 “YY”代表客户的应用。 客户端已在 Azure AD 的“YY”租户中注册了一个应用程序,并为其提供了必要的图形 API 权限(例如 Sites.FullControl.All 或 Files.ReadWrite.All)。
我们的应用程序 (XX) 必须获得“YY”租户中管理员的同意。管理员需要批准我们的应用程序 (XX) 才能访问他们的资源。
一旦获得同意,我们的应用程序(XX)将被授权访问“YY”租户中的资源。
客户 (YY) 必须授予我们的应用程序 (XX) 访问其租户中的 OneDrive 或 SharePoint 资源的权限。这是通过向 /permissions 发出 Microsoft Graph API POST 请求来完成的。
此步骤确保我们的应用程序 (XX) 可以访问客户 (YY) 租户中的特定资源。
授予权限后,我们可以使用应用程序的 (XX) 客户端 ID、机密和租户从客户端 (YY) OneDrive/SharePoint 获取文档。
目前,我们已经使用我们的应用程序 (XX) 凭据生成了访问令牌,该令牌应该有权访问客户端 (YY) 租户中的资源。尽管如此,它仍然无法正常运行,我们需要在客户端环境中注册两个应用程序,并具有两个不同的权限。
我们是不是漏掉了什么?
要访问其他租户中的 OneDrive 或 SharePoint 资源,请检查以下内容:
在
TenantA
创建了 Microsoft Entra ID 应用程序并授予 API 权限:
在
TenantB
中,创建服务主体并授予管理员同意:
New-AzADServicePrincipal -ApplicationId <AppIDOfTenantAApp>
授予所选站点权限(可选):
POST https://graph.microsoft.com/v1.0/sites/{sitesIdofTenantB}/permissions
Content-Type: application/json
{
"roles": ["write"],
"grantedToIdentities": [{
"application": {
"id": "TenantAAppID",
"displayName": "SharePointApp"
}
}]
}
使用 TenantB
租户 ID 生成访问令牌:
https://login.microsoftonline.com/TenantBTenantID/oauth2/v2.0/token
client_id:TenantAAppID
client_secret:TenantAClientSecret
scope↵:https://graph.microsoft.com/.default
grant_type:client_credentials
确保访问令牌中存在角色:
现在使用此访问令牌来获取
TenantB
中的文档:
我能够成功获取
TenantB
网站的驱动:
https://graph.microsoft.com/v1.0/sites/SiteID/drives/bDriveID
您可以根据您的需求参考这个MsDoc获取API。
参考:
sharepoint - 访问 Microsoft Graph API 进行多租户应用程序注册时,如何解决“此租户的主机名无效”错误? - Stack Overflow 由我