コード例 #1
0
        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);
            }
        }