Ejemplo n.º 1
0
        static void TestCallAPIWithTokenMultiCall()
        {
            var elm = new SecurityTokenHelperElement
            {
                AuthEndpoint   = TestHelper.basicUrl + "/GetToken",
                ContentType    = "application/json",
                Headers        = "Accept: application/json\n" + TestHelper.AuthParams.Replace("&", "\n").Replace("=", ":"),
                HttpMethod     = HttpMethodEnum.GET,
                TokenUsage     = TokenUsageEnum.QueyParameter,
                TokenKey       = "Authorization",
                TokenPrefix    = "In QueryString",
                TokenPath      = "$..Access_Token",
                CacheToken     = true,
                TokenExpiresIn = 10,
                TokenId        = Guid.NewGuid(),
            };
            var binding  = new WebHttpBinding();
            var behavior = TestHelper.GetBehavior(elm);
            var factory  = new ChannelFactory <ITestService>(binding, new EndpointAddress(TestHelper.basicUrl));

            factory.Endpoint.EndpointBehaviors.Add(new WebHttpBehavior());
            factory.Endpoint.EndpointBehaviors.Add(behavior);
            var    channel = factory.CreateChannel();
            string token1 = "a", token2 = "b", token3 = "c", token4 = "d", token5 = "e";
            var    task1 = Task.Run(() => token1 = channel.CallAPIWithTokenInQueryString());
            var    task2 = Task.Run(() => token2 = channel.CallAPIWithTokenInQueryString());
            var    task3 = Task.Run(() => token3 = channel.CallAPIWithTokenInQueryString());
            var    task4 = Task.Run(() => token4 = channel.CallAPIWithTokenInQueryString());
            var    task5 = Task.Run(() => token5 = channel.CallAPIWithTokenInQueryString());

            Task.WaitAll(task1, task2, task3, task4, task5);
            Console.WriteLine($"Retrieved token for the first call: token1={token1}");
            Console.WriteLine($"Retrieved token for the second call: token2={token2}");
            Console.WriteLine($"Retrieved token for the third call: token3={token3}");
            Console.WriteLine($"Retrieved token for the fourth call: token4={token4}");
            Console.WriteLine($"Retrieved token for the fifth call: token5={token5}");
            if (token1 != token2 | token2 != token3 | token3 != token4 | token4 != token5)
            {
                throw new Exception("Not equal");
            }
            Console.WriteLine($"token1=token2=token3=token4=token5");
        }
        internal static SecurityTokenHelperBehavior GetBehavior(SecurityTokenHelperElement elm)
        {
            MethodInfo method = elm.GetType().GetMethod("CreateBehavior", BindingFlags.Instance | BindingFlags.NonPublic);
            SecurityTokenHelperBehavior endpointBehavior = null;

            if (method != (MethodInfo)null)
            {
                try
                {
                    endpointBehavior = method.Invoke((object)elm, new object[0]) as SecurityTokenHelperBehavior;
                }
                catch (TargetInvocationException ex)
                {
                    if (ex.InnerException != null)
                    {
                        throw ex.InnerException;
                    }
                    throw;
                }
            }
            return(endpointBehavior);
        }
Ejemplo n.º 3
0
        static void TestCallAPIWithCachedTokenExpired()
        {
            var elm = new SecurityTokenHelperElement
            {
                AuthEndpoint   = TestHelper.basicUrl + "/GetTokenWithAuthParamsAsHeaders",
                ContentType    = "application/json",
                Headers        = "Accept: application/json\n" + TestHelper.AuthParams.Replace("&", "\n").Replace("=", ":"),
                HttpMethod     = HttpMethodEnum.GET,
                TokenUsage     = TokenUsageEnum.QueyParameter,
                TokenKey       = "Authorization",
                TokenPrefix    = "In QueryString",
                TokenPath      = "$..Access_Token",
                CacheToken     = true,
                TokenExpiresIn = 2,
                TokenId        = Guid.NewGuid(),
            };
            var binding  = new WebHttpBinding();
            var behavior = TestHelper.GetBehavior(elm);
            var factory  = new ChannelFactory <ITestService>(binding, new EndpointAddress(TestHelper.basicUrl));

            factory.Endpoint.EndpointBehaviors.Add(new WebHttpBehavior());
            factory.Endpoint.EndpointBehaviors.Add(behavior);
            var    channel = factory.CreateChannel();
            string token1  = channel.CallAPIWithTokenInQueryString();

            Console.WriteLine($"Retrieved token for the first call: token1={token1}");
            Console.WriteLine("Wait for 3s until the token gets expired...");
            Task.Delay(3000).GetAwaiter().GetResult();
            string token2 = channel.CallAPIWithTokenInQueryString();

            Console.WriteLine($"Retrieved token for the second call: token2={token2}");
            if (token1 == token2)
            {
                throw new Exception("Must not be equal");
            }
            Console.WriteLine("token1!=token2");
        }
Ejemplo n.º 4
0
        public void TestCallAPIWithTokenInQueryString()
        {
            var elm = new SecurityTokenHelperElement
            {
                AuthEndpoint = TestHelper.basicUrl + "/GetTokenWithAuthParamsAsHeaders",
                ContentType  = "application/json",
                Headers      = "Accept: application/json\n" + TestHelper.AuthParams.Replace("&", "\n").Replace("=", ":"),
                HttpMethod   = HttpMethodEnum.GET,
                TokenUsage   = TokenUsageEnum.QueyParameter,
                TokenKey     = "Authorization",
                TokenPrefix  = "In QueryString",
                TokenPath    = "$..Access_Token",
            };
            var binding  = new WebHttpBinding();
            var behavior = TestHelper.GetBehavior(elm);
            var factory  = new ChannelFactory <ITestService>(binding, new EndpointAddress(TestHelper.basicUrl));

            factory.Endpoint.EndpointBehaviors.Add(new WebHttpBehavior());
            factory.Endpoint.EndpointBehaviors.Add(behavior);
            var    channel = factory.CreateChannel();
            string ret     = channel.CallAPIWithTokenInQueryString();

            Assert.IsTrue(ret.StartsWith("In QueryString"));
        }