尝试为用户添加
AppRoleAssignment
时出现错误:
{"odata.error":{"code":"Request_BadRequest","message":{"lang":"en","value":"一个或多个属性无效。"},"date":" 2017-10-21T14:49:42","requestId":"3aacf13e-5620-40da-8fd0-fb2d4130f171","值":null}}
当我使用实际的
ApproleId
时,一切正常。然而,当我设置
AppRoleAssignment.Id = new Guid();
我收到上述错误;
这没有意义,因为文档说这是允许的 通过设置零 GUID,SO 的其他帖子中也强调了这一点。
我在这里缺少什么?
完整代码:
AppRoleAssignment appRoleAssignment = new AppRoleAssignment()
{
Id = new Guid(),
ResourceId = Guid.Parse(servicePrincipal.ObjectId),
PrincipalId = Guid.Parse(user.ObjectId),
PrincipalType = "User"
};
user.AppRoleAssignments.Add(appRoleAssignment);
await user.UpdateAsync();
根据我的经验,有两种情况我们可能会遇到此问题。
首先,如果服务主体中有自定义角色,您希望分配默认角色。
其次,如果我们之前已经为该人分配了默认角色。
请检查您是否处于这两种情况之一,如果您仍然遇到此问题,请告诉我。
我在使用 PowerShell 时面临同样的问题:
$EmptyGuid = [GUID]::Empty
New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $ManagedIdentityID -PrincipalId $ManagedIdentityID -AppRoleId $EmptyGuid -ResourceId $GraphResourceID.Id
错误是:New-MgServicePrincipalAppRoleAssignment:无法将文字“”转换为预期类型“Edm.Guid”。
看来,这在幕后并没有发挥作用
我遇到了同样的问题,并且我也尝试对 -AppRoleId 参数使用空 GUID,如 Microsoft 所示,但无济于事。
我发现 -AppRoleId 参数确实需要有一个有效的 GUID,而不是空的。
最初,我使用以下方法提取我的服务主体:
$app = Get-AzureADServicePrincipal -Filter "DisplayName eq '$targetapp'"
然后,我尝试使用以下方法获取分配给该应用程序的角色:
$app.AppRoles
但是 $app.AppRoles 总是返回 null。
我没有使用属于 AzureAD 模块的 Get-AzureADServicePrincipal,而是将其替换为 Get-MgServicePrincipal,它是 MG-Graph 的一部分,通过这样做,$app.AppRoles 不再返回空值。相反,它现在返回分配给应用程序的默认角色及其 GUID。
通过在 “AppRoleId” 字段中使用此 GUID,New-MgGroupAppRoleAssignment 成功执行。