使用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
相关产品推荐
相关产品推荐

