You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用New-MgApplicationOwnerByRef添加SPN为应用所有者的参数疑问及报错

使用Microsoft Graph将SPN添加为应用注册所有者的问题解答

1. @odata.id 参数取值

@odata.id 需要传入SPN的对象ID,格式必须是完整的Graph API路径:https://graph.microsoft.com/v1.0/directoryObjects/{SPN对象ID}。

你可以通过以下命令获取SPN的对象ID:

Get-MgServicePrincipal -Filter "appId eq '{你的SPN应用ID}'" | Select-Object Id

2. -ApplicationId 参数取值

-ApplicationId 要传入的是你要添加所有者的目标应用注册的对象ID,注意不是该应用的客户端ID(App ID)。

获取目标应用注册的对象ID:

Get-MgApplication -Filter "displayName eq '{目标应用名称}'" | Select-Object Id

3. SPN配置API权限的报错解决

所需权限

必须为用于自动化的SPN配置Microsoft Graph应用权限:Application.ReadWrite.All,且需要租户管理员完成权限同意。委派权限无法实现此操作。

常见报错排查

  • 权限不足:检查是否已添加Application.ReadWrite.All应用权限,且管理员已同意;确认Connect-MgGraph时使用的是应用身份验证(而非用户身份)。
  • 对象ID错误:核对目标应用注册的对象ID、SPN的对象ID是否正确,避免混淆应用ID(Client ID)和对象ID。
  • API版本问题:使用v1.0版本的Graph API,beta版本可能存在兼容性问题。

完整示例代码

# 以应用身份连接Microsoft Graph(推荐用证书验证)
Connect-MgGraph -ClientId "你的SPN应用ID" -TenantId "你的租户ID" -CertificateThumbprint "证书指纹"

# 获取目标应用注册的对象ID
$targetAppObjectId = (Get-MgApplication -Filter "displayName eq '目标应用名称'").Id

# 获取SPN的对象ID
$spnObjectId = (Get-MgServicePrincipal -Filter "appId eq '你的SPN应用ID'").Id

# 构造符合要求的@odata.id值
$ownerOdataId = "https://graph.microsoft.com/v1.0/directoryObjects/$spnObjectId"

# 执行添加所有者操作
New-MgApplicationOwnerByRef -ApplicationId $targetAppObjectId -BodyParameter @{ "@odata.id" = $ownerOdataId }

内容的提问来源于stack exchange,提问作者tester81

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 20:21:04