我正在尝试使用以下代码添加 AppRoleAssignment:
AppRoleAssignment objAppRoleAssignment = new AppRoleAssignment();
objAppRoleAssignment.Id = Guid.Parse("00000000-0000-0000-0000-000000000000");
objAppRoleAssignment.ResourceId = Guid.Parse("ServicePrincipalID");
objAppRoleAssignment.PrincipalType = "User";
objAppRoleAssignment.PrincipalId = Guid.Parse(user.ObjectId);
user.AppRoleAssignments.Add(objAppRoleAssignment);
await user.UpdateAsync();
我没有任何角色,因此我指定默认 00000000-0000-0000-0000-000000000000
角色
但我收到此错误:
{"odata.error":{"code":"Request_BadRequest","message":{"lang":"en","value":"One or more properties are invalid."},"values":null}}
最佳答案
你的做法是正确的。似乎存在两个错误,使您的更改看起来没有被保存。
- 第一次运行此命令(应用程序角色分配不存在),即使请求实际上成功并确实创建了应用程序角色分配,SDK 也会出错,因为响应中的应用程序角色分配具有null id 值,这会导致抛出以下异常:
A null value was found for the property named 'id', which has the expected type 'Edm.Guid[Nullable=False]'. The expected type 'Edm.Guid[Nullable=False]' does not allow null values.
- 如果您随后重试(创建应用程序角色分配后),您现在将收到您共享的错误,这是相当具有误导性的,因为问题不在于您获得了错误的值,而在于您“正在尝试为已有的资源 + 主体创建 appRoleAssigment。您可以通过查询(直接或通过 https://graphexplorer.cloudapp.net )以下内容来确认这种情况:
https://graph.windows.net/[yourtenant]/servicePrincipals/[ResourceID]/appRoleAssignedTo
或
https://graph.windows.net/[yourtenant]/users/[PrincipalID]/appRoleAssignments
我们正在研究解决此问题,但在此期间,您可以选择接受 #1 中的异常,或者不使用 SDK 并手动创建对 appRoleAssignments 的发布请求。
关于c# - 尝试添加 AppRoleAssignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38075294/