예제 #1
0
        public async Task OAuth_Password_Test2(string apiUrl)
        {
            TokenManager tm            = new TokenManager("pwmis", "1234567890");
            var          tokenResponse = await tm.CreateToken("oath2");

            oAuthCenterClient.CurrentToken = tokenResponse;
            //获取 access_token 后10秒内必须使用它,否则会过期,需要刷新后取得它再访问资源服务器
            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenResponse.AccessToken);

            var response = await _httpClient.GetAsync(apiUrl);//"/api/values"

            if (response.StatusCode != HttpStatusCode.OK)
            {
                Console.WriteLine(response.StatusCode);
                Console.WriteLine((await response.Content.ReadAsAsync <HttpError>()).ExceptionMessage);
            }
            Console.WriteLine(await response.Content.ReadAsStringAsync());
            //Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            Console.WriteLine("10秒后测试刷新AccessToken...");
            Thread.Sleep(10000);
            for (int a = 0; a < 3; a++)
            {
                for (int i = 0; i < 5; i++)
                {
                    Task.Factory.StartNew(obj =>
                    {
                        int index = (int)obj;
                        Console.WriteLine("--No.{0}----------Thread ID:{1}-", index, Thread.CurrentThread.ManagedThreadId);
                        var tokenResponseTwo = tm.TakeToken();
                        if (tokenResponseTwo != null)
                        {
                            Console.WriteLine("第{0}次刷新令牌成功。Trhead ID:{1}", index, Thread.CurrentThread.ManagedThreadId);
                            oAuthCenterClient.CurrentToken = tokenResponseTwo;
                            oAuthCenterClient.SetAuthorizationRequest(_httpClient, tokenResponseTwo);
                            //var responseTwo = await _httpClient.GetAsync(apiUrl);
                            var responseTwo = _httpClient.GetAsync(apiUrl).Result;
                            if (responseTwo != null)
                            {
                                Console.WriteLine("第{0}次刷新令牌,访问资源,结果:{1},Trhead ID:{2}", index, responseTwo.StatusCode, Thread.CurrentThread.ManagedThreadId);
                            }
                            else
                            {
                                Console.WriteLine("第{0}次刷新令牌,访问资源失败。。。。。", index);
                            }
                        }
                        else
                        {
                            Console.WriteLine("********第{0}次*获取令牌失败**************", index);
                        }

                        tm.Dispose();
                    }, (object)i);
                }
                Console.WriteLine("5 秒后进行下次测试--------------------");
                Thread.Sleep(5000);
            }


            Console.WriteLine("测试完成.");
        }