如何借助MS Graph根据多租户应用的Client ID获取主租户ID?
通过应用Client ID定位多租户应用主租户的方法
当你在自身租户中使用的多租户应用因客户端密钥过期停摆,需要联系应用所有者时,可以通过以下方法获取其主租户ID或域名:
一、手动查询(无需代码)
- 利用Azure门户:
- 登录你的Azure租户,进入「企业应用」>「所有应用」
- 搜索目标应用的Client ID,找到对应的服务主体条目
- 进入详情页后,查看「所有者」列表——若所有者是外部租户用户,其UPN格式(如
user@contoso.com)中的域名就是主租户域名 - 也可以用Azure CLI快速获取主租户ID:
az ad sp show --id <你的应用ClientID> --query "appOwnerOrganizationId"
二、Microsoft Graph 查询方案
必要权限
需要拥有 Directory.Read.All 或 Application.Read.All 权限(委派权限或应用权限均可,根据你的认证方式选择)
具体操作
1. 获取主租户ID
发送GET请求:
GET https://graph.microsoft.com/v1.0/servicePrincipals/<ClientID>?$select=appOwnerOrganizationId,displayName
响应中的 appOwnerOrganizationId 字段就是该多租户应用注册所在的主租户ID。
2. 通过主租户ID获取默认域名
拿到主租户ID后,发送GET请求:
GET https://graph.microsoft.com/v1.0/organization/<主租户ID>?$select=verifiedDomains
在返回的 verifiedDomains 数组里,找到 isDefault: true 的条目,其 name 字段就是主租户的默认域名。
PowerShell 示例(使用Graph模块)
# 连接Graph并授权 Connect-MgGraph -Scopes "Directory.Read.All" # 查询服务主体的主租户ID $servicePrincipal = Get-MgServicePrincipal -ServicePrincipalId "<ClientID>" -Property appOwnerOrganizationId $mainTenantId = $servicePrincipal.AppOwnerOrganizationId # 查询主租户默认域名 $tenantInfo = Get-MgOrganization -OrganizationId $mainTenantId -Property verifiedDomains $defaultDomain = ($tenantInfo.VerifiedDomains | Where-Object { $_.IsDefault }).Name # 输出结果 Write-Host "主租户ID: $mainTenantId" Write-Host "主租户默认域名: $defaultDomain"
三、补充说明
- 如果
appOwnerOrganizationId返回空值,可查看服务主体的publisherName字段,通常会包含主租户的名称或域名线索 - 若无法直接获取所有者信息,对于微软发布的应用可联系微软支持,第三方应用则可通过域名尝试查找租户管理员联系方式
内容的提问来源于stack exchange,提问作者Shuzheng
相关产品推荐
相关产品推荐

