public async Task <UserDB> CreateUserAsync(CreateUser payload, TraceWriter log, HttpRequestMessage req) { var tenant = _applicationConfig.B2CTenant; var clientID = _applicationConfig.B2CClient; var secret = _applicationConfig.B2CSecret; // Ceremony var authority = $"{_authorityEndpoint}{tenant}"; var authContext = new AuthenticationContext(authority); var credentials = new ClientCredential(clientID, secret); AuthenticationResult result = await authContext.AcquireTokenAsync(_aadGraphResourceId, credentials); HttpClient http = new HttpClient(); string url = _aadGraphEndpoint + tenant + "/users?" + _aadGraphVersion; HttpRequestMessage adRequest = new HttpRequestMessage(HttpMethod.Post, url); var userString = JsonConvert.SerializeObject(payload.GetB2CUser()); adRequest.Content = new StringContent(userString, Encoding.UTF8, "application/json"); adRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); HttpResponseMessage adResponse = await http.SendAsync(adRequest); string responseText = await adResponse.Content.ReadAsStringAsync(); if (adResponse.IsSuccessStatusCode == false) { log.Error($"Error in AD response {adResponse.StatusCode}: {responseText}"); return(null); } var b2CUser = JObject.Parse(responseText).ToObject <User>(); var newUser = new UserDB(b2CUser); newUser.organisationId = payload.organisationId; newUser.organisationName = payload.organisationName; newUser.appRole = payload.AppRole; newUser.appRoleDisplayName = payload.AppRoleDisplayName; newUser.driverId = payload.driverId; return(await _userRepository.CreateItemAsync(newUser, _userDigestService, req)); }