尝试添加AppRoleAssignment

时间:2016-06-28 11:43:11

标签: 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 个答案:

答案 0 :(得分:1)

你这样做是正确的。似乎存在两个错误,使得您的更改似乎没有得到保存。

  1. 第一次运行此操作(应用程序角色分配不存在)时,即使请求实际成功并确实创建了应用程序角色分配,SDK也会出错,因为响应中的应用程序角色分配具有null id value,导致它抛出以下异常:
  2.   

    找到名为“id”的属性的空值,该属性具有预期类型“Edm.Guid [Nullable = False]”。期望的类型'Edm.Guid [Nullable = False]'不允许空值。

    1. 如果你再重试(一旦创建了应用程序角色分配),你现在就会收到你所分享的错误,这是一个非常误导的问题,因为问题不在于你有错误的价值而是你的错误重新尝试为已经有一个的Resource + Principal创建一个appRoleAssigment。您可以通过查询(直接或通过https://graphexplorer.cloudapp.net)以下内容来确认是这种情况:
    2.   

      https://graph.windows.net/[yourtenant]/servicePrincipals/[ResourceID]/appRoleAssignedTo

        

      https://graph.windows.net/[yourtenant]/users/[PrincipalID]/appRoleAssignments

      我们正在考虑纠正这个问题,但在此期间您可以选择在#1中吞下例外,或者不使用SDK并手动将您的发布请求发送到appRoleAssignments。