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());
        }
        public async Task OAuth2RequestSigningHandler_ClientCredentialsGrant_AuthorisesOk()
        {
            #region Test Setup

            MockMessageHandler mockHandler = SetupOAuth2MockHandler();

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

            var settings = new OAuth2Settings();
            //Set the grant type
            settings.GrantType = OAuth2GrantTypes.ClientCredentials;
            //Set the credentials to use when requesting a new token
            settings.ClientCredentialProvider = new SimpleCredentialProvider(credentials);

            // Make sure token requests use our mock handler
            settings.CreateHttpClient = () => new System.Net.Http.HttpClient(mockHandler);

            //These settings are provided for all auth flows
            settings.AccessTokenUrl = new Uri("http://testsite.com/Token");
            settings.AuthorizeUrl   = new Uri("http://testsite.com/Authorize");
            settings.RedirectUrl    = new Uri("http://testsite.com/redirect");

            // Create a request signer using the config
            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();
        }
 public void OAuth2RequestSigningHandler_Constructor_ThrowsOnInvalidSettings()
 {
     var settings = new OAuth2Settings();
     var handler  = new OAuth2RequestSigningHandler(settings);
 }
 public void OAuth2RequestSigningHandler_Constructor_ThrowsOnNullSettings()
 {
     var handler = new OAuth2RequestSigningHandler(null);
 }