コード例 #1
0
        private static async Task<TokenResponse> RedeemRefreshTokenInternalAsync(OAuthAccount account)
        {
            HttpWebRequest request = WebRequest.CreateHttp(account.TokenService);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";

            var requestStream = await request.GetRequestStreamAsync();
            var writer = new StreamWriter(requestStream);

            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("client_id={0}", Uri.EscapeDataString(account.ClientId));
            sb.AppendFormat("&redirect_uri={0}", Uri.EscapeDataString(account.RedirectUri));
            sb.AppendFormat("&client_secret={0}", Uri.EscapeDataString(account.ClientSecret));
            sb.AppendFormat("&refresh_token={0}", Uri.EscapeDataString(account.RefreshToken));
            sb.Append("&grant_type=refresh_token");
            if (null != account.Resource)
                sb.AppendFormat("&resource={0}", Uri.EscapeDataString(account.Resource));

            var content = sb.ToString();
            await writer.WriteAsync(content);
            await writer.FlushAsync();

            var response = await request.GetResponseAsync() as HttpWebResponse;
            if (null != response && response.StatusCode == HttpStatusCode.OK)
            {
                var responseStream = response.GetResponseStream();
                if (null != responseStream)
                {
                    var reader = new StreamReader(responseStream);
                    return JsonConvert.DeserializeObject<TokenResponse>(await reader.ReadToEndAsync());
                }
            }
            return null;
        }
コード例 #2
0
 public static async Task<TokenResponse> RedeemRefreshTokenAsync(OAuthAccount account)
 {
     try
     {
         return await RedeemRefreshTokenInternalAsync(account);
     }
     catch (Exception ex)
     {
         Console.WriteLine("Error redeeming token: " + ex.Message);
         return null;
     }
 }
コード例 #3
0
 public static async Task <TokenResponse> RedeemRefreshTokenAsync(OAuthAccount account)
 {
     try
     {
         return(await RedeemRefreshTokenInternalAsync(account));
     }
     catch (Exception ex)
     {
         Console.WriteLine("Error redeeming token: " + ex.Message);
         return(null);
     }
 }
コード例 #4
0
        private static async Task <TokenResponse> RedeemRefreshTokenInternalAsync(OAuthAccount account)
        {
            HttpWebRequest request = WebRequest.CreateHttp(account.TokenService);

            request.ContentType = "application/x-www-form-urlencoded";
            request.Method      = "POST";

            var requestStream = await request.GetRequestStreamAsync();

            var writer = new StreamWriter(requestStream);

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("client_id={0}", Uri.EscapeDataString(account.ClientId));
            sb.AppendFormat("&redirect_uri={0}", Uri.EscapeDataString(account.RedirectUri));
            if (account.ClientSecret != null)
            {
                sb.AppendFormat("&client_secret={0}", Uri.EscapeDataString(account.ClientSecret));
            }
            sb.AppendFormat("&refresh_token={0}", Uri.EscapeDataString(account.RefreshToken));
            sb.Append("&grant_type=refresh_token");
            if (null != account.Resource)
            {
                sb.AppendFormat("&resource={0}", Uri.EscapeDataString(account.Resource));
            }

            var content = sb.ToString();
            await writer.WriteAsync(content);

            await writer.FlushAsync();


            // TODO: Expect to encounter a 401 here, and handle the response: {"error":"invalid_client","error_description":"AADSTS70002: Error validating credentials. AADSTS50012: Invalid client secret is provided.\r\nTrace ID: b416d386-2d5e-40b9-889a-6b2286b30100\r\nCorrelation ID: 2a021806-2134-4610-8bd4-760727cb4465\r\nTimestamp: 2017-04-20 17:47:22Z","error_codes":[70002,50012],"timestamp":"2017-04-20 17:47:22Z","trace_id":"b416d386-2d5e-40b9-889a-6b2286b30100","correlation_id":"2a021806-2134-4610-8bd4-760727cb4465"}

            var response = await request.GetResponseAsync() as HttpWebResponse;

            if (null != response && response.StatusCode == HttpStatusCode.OK)
            {
                var responseStream = response.GetResponseStream();
                if (null != responseStream)
                {
                    var reader = new StreamReader(responseStream);
                    return(JsonConvert.DeserializeObject <TokenResponse>(await reader.ReadToEndAsync()));
                }
            }
            return(null);
        }
コード例 #5
0
        /// <summary>
        /// Use reflection to replace the value in any string properties with a JsonProperty attribute
        /// based on the value of an environment variable, if one exists.
        /// </summary>
        internal void ReplaceEnvironmentVariables()
        {
            const string  ENV_MARKER       = "$env:";
            List <string> missingVariables = new List <string>();
            Type          t          = this.GetType();
            var           properties = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);

            foreach (var prop in properties)
            {
                if (prop.PropertyType != typeof(string))
                {
                    continue;
                }
                var attribute = prop.GetCustomAttribute(typeof(CanBeEnvironmentVariableAttribute));
                if (null == attribute)
                {
                    continue;
                }

                string value = prop.GetValue(this, null) as string;
                if (null != value && value.StartsWith(ENV_MARKER))
                {
                    // Replace with the approriate environment variable
                    var variable = value.Substring(ENV_MARKER.Length);
                    try
                    {
                        var newValue = OAuthAccount.ReadVariable(variable);
                        if (newValue != null)
                        {
                            prop.SetValue(this, newValue, null);
                        }
                    }
                    catch (OAuthAccountException)
                    {
                        missingVariables.Add(variable);
                    }
                }
            }

            if (missingVariables.Any())
            {
                this.Enabled = false;
                Console.WriteLine($"Unable to find $env values in account {Name}: {missingVariables.ComponentsJoinedByString(", ")}");
            }
        }
コード例 #6
0
        private static async Task <TokenResponse> RedeemRefreshTokenInternalAsync(OAuthAccount account)
        {
            HttpWebRequest request = WebRequest.CreateHttp(account.TokenService);

            request.ContentType = "application/x-www-form-urlencoded";
            request.Method      = "POST";

            var requestStream = await request.GetRequestStreamAsync();

            var writer = new StreamWriter(requestStream);

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("client_id={0}", Uri.EscapeDataString(account.ClientId));
            sb.AppendFormat("&redirect_uri={0}", Uri.EscapeDataString(account.RedirectUri));
            if (account.ClientSecret != null)
            {
                sb.AppendFormat("&client_secret={0}", Uri.EscapeDataString(account.ClientSecret));
            }
            sb.AppendFormat("&refresh_token={0}", Uri.EscapeDataString(account.RefreshToken));
            sb.Append("&grant_type=refresh_token");
            if (null != account.Resource)
            {
                sb.AppendFormat("&resource={0}", Uri.EscapeDataString(account.Resource));
            }

            var content = sb.ToString();
            await writer.WriteAsync(content);

            await writer.FlushAsync();

            var response = await request.GetResponseAsync() as HttpWebResponse;

            if (null != response && response.StatusCode == HttpStatusCode.OK)
            {
                var responseStream = response.GetResponseStream();
                if (null != responseStream)
                {
                    var reader = new StreamReader(responseStream);
                    return(JsonConvert.DeserializeObject <TokenResponse>(await reader.ReadToEndAsync()));
                }
            }
            return(null);
        }