【问题标题】:Create user using Azure AD Graph API in Azure AD B2C在 Azure AD B2C 中使用 Azure AD Graph API 创建用户
【发布时间】:2019-08-10 00:39:02
【问题描述】:

我正在尝试在我的 Azure AD B2C 目录中创建一个用户。我已通过在 cmd 中使用此命令发布示例 JSON 文件成功创建了一个用户:

>B2C Create-User <Path to my JSON file>

我想做的是发布一些 JSON 字符串而不是 JSON 文件,命令行给我以下错误:

Error Calling the Graph API:
{
  "odata.error": {
    "code": "Request_BadRequest",
    "message": {
      "lang": "en",
      "value": "A value without a type name was found and no expected type is available. When the model is specified, each value in the payload must have a type which can be either specified in the payload, explicitly by the caller or implicitly inferred from the parent value."
    },
    "requestId": "965dba69-4488-4d24-88a4-989a6d06cd8d",
    "date": "2019-03-19T12:55:27"
  }
}

这就是我尝试发布 JSON 的方式:

private static void CreateUser(string[] args)
    {

        string json = new JavaScriptSerializer().Serialize(new
        {
            accountEnabled = true,
            SignInName = new List<UserInformation.SignInName>()
            {
                new UserInformation.SignInName(){ type = "emailAddress", value = "safanmomin92@gmail.com" }
            },
            creationType = "LocalAccount",
            displayName = "Safan Momin",
            mailNickname = "Safan",
            passwordProfile = new UserInformation.PasswordProfile
            {
                password = "Mazik@123", forceChangePasswordNextLogin = false
            },
            passwordPolicies = "DisablePasswordExpiration"

        });

        object formatted = JsonConvert.DeserializeObject(client.CreateUser(json).Result);
    }

这是我的 CreateUser 方法:

 public async Task<string> CreateUser(string json)
    {
        return await SendGraphPostRequest("/users", json);
    }

这是我的 SendGraphPostRequest 方法:

private async Task<string> SendGraphPostRequest(string api, string json)
        {
            // NOTE: This client uses ADAL v2, not ADAL v4
            AuthenticationResult result = authContext.AcquireToken(Globals.aadGraphResourceId, credential);
            HttpClient http = new HttpClient();
            string url = Globals.aadGraphEndpoint + tenant + api + "?" + Globals.aadGraphVersion;

            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("POST " + url);
            Console.WriteLine("Authorization: Bearer " + result.AccessToken.Substring(0, 80) + "...");
            Console.WriteLine("Content-Type: application/json");
            Console.WriteLine("");
            Console.WriteLine("JSON: "+json);
            Console.WriteLine("");

            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
            request.Content = new StringContent(json, Encoding.UTF8, "application/json");
            HttpResponseMessage response = await http.SendAsync(request);

            if (!response.IsSuccessStatusCode)
            {
                string error = await response.Content.ReadAsStringAsync();
                object formatted = JsonConvert.DeserializeObject(error);
                throw new WebException("Error Calling the Graph API: \n" + JsonConvert.SerializeObject(formatted, Formatting.Indented));
            }

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine((int)response.StatusCode + ": " + response.ReasonPhrase);
            Console.WriteLine("");

            return await response.Content.ReadAsStringAsync();
        }

【问题讨论】:

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


    【解决方案1】:

    我在比较我的 JSON 字符串时发现了一个错误。我写的是SignInName 而不是signInNames

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多