c# - 尝试添加 AppRoleAssignment

标签 c# azure active-directory azure-active-directory

我正在尝试使用以下代码添加 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}}

最佳答案

你的做法是正确的。似乎存在两个错误,使您的更改看起来没有被保存。

  1. 第一次运行此命令(应用程序角色分配不存在),即使请求实际上成功并确实创建了应用程序角色分配,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/

    相关文章:

    azure - 使用 Windows Azure 进行 GeoIP 路由

    azure - Active Directory 上授予同意失败并出现错误

    perl - 使用perl获取AD组的用户

    c# - 如何使用 .NET CORE 获取存储过程的实际结果?

    c# - Azure存储表-插入批量行并检查它们是否存在

    c# - 初始化和填充新列表 <> 的更简洁方法?

    azure - 更新多个资源的 Azure 资源标签

    c# - PrincipalSearcher 和 DirectorySearcher 之间的区别

    c# - 如何使用新的 Twitter API v1.1 提取用户的推文?

    c# - 如何使用 TDD 方法创建 Restful Web 服务?