图表API请求返回"一个或多个属性包含无效值"

时间:2016-02-17 11:22:49

标签: json azure-ad-graph-api azure-ad-b2c

我正在尝试在我们公司的Azure目录上执行B2C用户创建。作为参考,我使用Microsoft的这个站点,以及其中的.DotNet示例。

https://azure.microsoft.com/en-us/documentation/articles/active-directory-b2c-devquickstarts-graph-dotnet/

我完全按照这个例子,我到达了我得到的地步 经过身份验证,我可以在目录中解压缩AD用户。这是我生成的示例请求。

获取https://graph.windows.net/mycompany/users?api-version = beta

但是当我开始在目录中创建示例用户时,我得到错误响应" 一个或多个属性包含无效值"。

POST https://graph.windows.net/mycompany/users?api-version = beta

这是我使用的有效负载,它是用于创建用户的网站示例中使用的完全相同的有效负载。这是JSON格式。

{" accountEnabled":true," alternativeSignInNamesInfo":[{" type":" emailAddress",&#34 ;值":" joeconsumer@gmail.com"}]," creationType":" NameCoexistence"," displayName":&# 34; Joe Consumer"," mailNickname":" joec"," passwordProfile":{" password":" P @ssword!"," forceChangePasswordNextLogin":false}," passwordPolicies":" DisablePasswordExpiration"}

此有效负载符合基于Microsoft的用户创建要求的要求,同样,它也是网站示例中完全相同的有效负载,这就是为什么我收到的消息是奇怪的属性具有无效值。更糟糕的是,响应没有明确说明哪个值是问题的根源。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

我认为贵公司的Active Directory不存在这种情况,您需要创建一个单独的B2C Active Directory。

按照本教程创建B2C目录: https://azure.microsoft.com/en-us/documentation/articles/active-directory-b2c-get-started/

答案 1 :(得分:0)

您是否已创建B2C租户,并且它具有在Azure AD中创建的应用程序。

请你试试这个有效载荷,它对我来说很好。

{
  "accountEnabled": true,
  "signInNames": [
    {
      "type": "emailAddress",
      "value": "joeconsumers6@gmail.com"
    }
  ],
  "creationType": "LocalAccount",
  "displayName": "karthikeyan",
  "mailNickname": "karthikeyan",
  "passwordProfile": {
    "password": "cads2016!",
    "forceChangePasswordNextLogin": false
  },
  "passwordPolicies": "DisablePasswordExpiration",
  "city": "San Diego",
  "country": null,
  "facsimileTelephoneNumber": null,
  "givenName": "Joe",
  "mail": null,
  "mobile": null,
  "otherMails": [],
  "postalCode": "92130",
  "preferredLanguage": null,
  "state": "California",
  "streetAddress": null,
  "surname": "Consumer",
  "telephoneNumber": null,

}

答案 2 :(得分:0)

当尝试创建一个具有登录名的用户时,出现错误,该用户将类型设置为userName,而该值实际上是一个电子邮件地址。我以为用户名可以允许任意字符串,但是显然,如果您想使用电子邮件作为用户名,则必须先将类型设置为emailAddress,然后才能通过Microsoft的验证。

public class SignInNames
{
    public string type { get; set; }
    public string value { get; set; }

    public SignInNames(string userName)
    {
        // Type must be 'emailAddress' (or 'userName')
        if (!string.IsNullOrWhiteSpace(userName) && userName.Contains("@"))
            this.type = "emailAddress";
        else
            this.type = "userName";

        // The user email address
        this.value = userName;
    }
}