public async Task OAuth2RequestSigningHandler_CanSignRequestsUsingNonInteractiveJsonResponse()
        {
            var credentials = new SimpleCredentials()
            {
                Identifier = TestSecrets.OAuth2CredentialId,
                Secret     = TestSecrets.OAuth2CredentialSecret
            };

            var settings = new OAuth2.OAuth2Settings()
            {
                AccessTokenUrl           = new Uri(TestSecrets.OAuth2AccessTokenUrl),
                AuthorizeUrl             = new Uri(TestSecrets.OAuth2AuthorisationUrl),
                RedirectUrl              = new Uri(TestSecrets.OAuth2RedirectUrl),
                ClientCredentialProvider = new SimpleCredentialProvider(credentials),
                Scope                 = "master_all",
                GrantType             = OAuth2.OAuth2GrantTypes.AuthorizationCode,
                RequestSigningMethod  = OAuth2HttpRequestSigningMethod.UrlQuery,
                RequestAuthentication = OAuth2RequestSigningHandler.NonInteractiveAuthenticationByJsonResponse
            };

            var signer = new OAuth2RequestSigningHandler(settings);
            var client = new System.Net.Http.HttpClient(signer);
            var result = await client.GetAsync(TestSecrets.OAuth2TestUrl1);

            result.EnsureSuccessStatusCode();
            var result2 = await client.GetAsync(TestSecrets.OAuth2TestUrl2);

            result2.EnsureSuccessStatusCode();
            var content = await result2.Content.ReadAsStringAsync();
        }
        public async Task OAuth2RequestSigningHandler_UsesInitialTokenIfNotExpired()
        {
            #region Test Setup

            MockMessageHandler mockHandler = SetupOAuth2MockHandler();

            var credentials = new SimpleCredentials()
            {
                Identifier = "987654321",
                Secret     = "abcdefghilmnopqrstuvzabc"
            };

            var settings = new OAuth2.OAuth2Settings()
            {
                AccessToken = new OAuth2.OAuth2Token()
                {
                    AccessToken = "123", ExpiresIn = 3600, RefreshToken = "456", TokenType = "Bearer", Created = DateTime.Now
                },
                CreateHttpClient         = () => new System.Net.Http.HttpClient(mockHandler),
                AccessTokenUrl           = new Uri("http://testsite.com/Token"),
                AuthorizeUrl             = new Uri("http://testsite.com/Authorize"),
                RedirectUrl              = new Uri("http://testsite.com/AuthComplete"),
                ClientCredentialProvider = new SimpleCredentialProvider(credentials),
                Scope                 = "master_all",
                GrantType             = OAuth2.OAuth2GrantTypes.AuthorizationCode,
                RequestSigningMethod  = OAuth2HttpRequestSigningMethod.AuthorizationHeader,
                RequestAuthentication = (authuri) =>
                {
                    throw new InvalidOperationException("New token was being requested! Existing token should have been used.");
                },
                TokenQueryStringKey = "oauth_token"
            };

            var signer = new OAuth2RequestSigningHandler(settings, mockHandler);

            #endregion

            var client = new System.Net.Http.HttpClient(signer);
            var result = await client.GetAsync("http://testsite.com/TestEndpoint");

            result.EnsureSuccessStatusCode();
            Assert.AreEqual("Yay! You're authed.", await result.Content.ReadAsStringAsync());
        }
        public async Task OAuth2RequestSigningHandler_RequestsTokenThenSignsRequest()
        {
            #region Test Setup

            MockMessageHandler mockHandler = SetupOAuth2MockHandler();

            var credentials = new SimpleCredentials()
            {
                Identifier = "987654321",
                Secret     = "abcdefghilmnopqrstuvzabc"
            };

            var settings = new OAuth2.OAuth2Settings()
            {
                CreateHttpClient         = () => new System.Net.Http.HttpClient(mockHandler),
                AccessTokenUrl           = new Uri("http://testsite.com/Token"),
                AuthorizeUrl             = new Uri("http://testsite.com/Authorize"),
                RedirectUrl              = new Uri("http://testsite.com/AuthComplete"),
                ClientCredentialProvider = new SimpleCredentialProvider(credentials),
                Scope                 = "master_all",
                GrantType             = OAuth2.OAuth2GrantTypes.AuthorizationCode,
                RequestSigningMethod  = OAuth2HttpRequestSigningMethod.AuthorizationHeader,
                RequestAuthentication = (authuri) =>
                {
                    return(Task.FromResult(new AuthorisationCodeResponse()
                    {
                        AuthorisationCode = "28770506516186843330"
                    }));
                },
                TokenQueryStringKey = "oauth_token"
            };

            var signer = new OAuth2RequestSigningHandler(settings, mockHandler);

            #endregion

            var client = new System.Net.Http.HttpClient(signer);
            var result = await client.GetAsync("http://testsite.com/TestEndpoint");

            result.EnsureSuccessStatusCode();
            Assert.AreEqual("Yay! You're authed.", await result.Content.ReadAsStringAsync());
        }