private async Task <OAuthToken> GetTokenInnerAsync(string realm, string service, string scope, string username, string password, CancellationToken cancellationToken = new CancellationToken()) { var queryString = new QueryString(); queryString.AddIfNotEmpty("service", service); queryString.AddIfNotEmpty("scope", scope); UriBuilder builder = new UriBuilder(new Uri(realm)) { Query = queryString.GetQueryString() }; var request = new HttpRequestMessage(HttpMethod.Get, builder.Uri); if (username != null && password != null) { // https://gist.github.com/jlhawn/8f218e7c0b14c941c41f var bytes = Encoding.UTF8.GetBytes($"{username}:{password}"); string parameter = Convert.ToBase64String(bytes); request.Headers.Authorization = new AuthenticationHeaderValue("Basic", parameter); } using (var response = await _client.SendAsync(request, cancellationToken)) { string body = await response.Content.ReadAsStringAsync(); var token = JsonConvert.DeserializeObject <OAuthToken>(body); return(token); } }