diff options
Diffstat (limited to 'src/DotNetOpenAuth.Test/OAuth2')
4 files changed, 245 insertions, 279 deletions
diff --git a/src/DotNetOpenAuth.Test/OAuth2/AuthorizationServerTests.cs b/src/DotNetOpenAuth.Test/OAuth2/AuthorizationServerTests.cs index b2f2666..3302db7 100644 --- a/src/DotNetOpenAuth.Test/OAuth2/AuthorizationServerTests.cs +++ b/src/DotNetOpenAuth.Test/OAuth2/AuthorizationServerTests.cs @@ -28,66 +28,60 @@ namespace DotNetOpenAuth.Test.OAuth2 { /// </summary> [Test] public async Task ErrorResponseTest() { - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var request = new AccessTokenAuthorizationCodeRequestC(AuthorizationServerDescription) { ClientIdentifier = ClientId, ClientSecret = ClientSecret, AuthorizationCode = "foo" }; - var client = new UserAgentClient(AuthorizationServerDescription, hostFactories: hostFactories); - var response = await client.Channel.RequestAsync<AccessTokenFailedResponse>(request, CancellationToken.None); - Assert.That(response.Error, Is.Not.Null.And.Not.Empty); - Assert.That(response.Error, Is.EqualTo(Protocol.AccessTokenRequestErrorCodes.InvalidRequest)); - }, - Handle(AuthorizationServerDescription.TokenEndpoint).By(async (req, ct) => { + Handle(AuthorizationServerDescription.TokenEndpoint).By( + async (req, ct) => { var server = new AuthorizationServer(AuthorizationServerMock); return await server.HandleTokenRequestAsync(req, ct); - })); - await coordinator.RunAsync(); + }); + var request = new AccessTokenAuthorizationCodeRequestC(AuthorizationServerDescription) { ClientIdentifier = ClientId, ClientSecret = ClientSecret, AuthorizationCode = "foo" }; + var client = new UserAgentClient(AuthorizationServerDescription, hostFactories: this.HostFactories); + var response = await client.Channel.RequestAsync<AccessTokenFailedResponse>(request, CancellationToken.None); + Assert.That(response.Error, Is.Not.Null.And.Not.Empty); + Assert.That(response.Error, Is.EqualTo(Protocol.AccessTokenRequestErrorCodes.InvalidRequest)); } [Test] public async Task DecodeRefreshToken() { var refreshTokenSource = new TaskCompletionSource<string>(); - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var client = new WebServerClient(AuthorizationServerDescription); - try { - var authState = new AuthorizationState(TestScopes) { Callback = ClientCallback, }; - var authRedirectResponse = await client.PrepareRequestUserAuthorizationAsync(authState, ct); - Uri authCompleteUri; - using (var httpClient = hostFactories.CreateHttpClient()) { - using (var response = await httpClient.GetAsync(authRedirectResponse.Headers.Location)) { - response.EnsureSuccessStatusCode(); - authCompleteUri = response.Headers.Location; - } - } - - var authCompleteRequest = new HttpRequestMessage(HttpMethod.Get, authCompleteUri); - authCompleteRequest.Headers.Add("Cookie", string.Join("; ", authRedirectResponse.Headers.GetValues("Set-Cookie"))); - var result = await client.ProcessUserAuthorizationAsync(authCompleteRequest, ct); - Assert.That(result.AccessToken, Is.Not.Null.And.Not.Empty); - Assert.That(result.RefreshToken, Is.Not.Null.And.Not.Empty); - refreshTokenSource.SetResult(result.RefreshToken); - } catch { - refreshTokenSource.TrySetCanceled(); + Handle(AuthorizationServerDescription.AuthorizationEndpoint).By( + async (req, ct) => { + var server = new AuthorizationServer(AuthorizationServerMock); + var request = await server.ReadAuthorizationRequestAsync(req, ct); + Assert.That(request, Is.Not.Null); + var response = server.PrepareApproveAuthorizationRequest(request, ResourceOwnerUsername); + return await server.Channel.PrepareResponseAsync(response); + }); + Handle(AuthorizationServerDescription.TokenEndpoint).By( + async (req, ct) => { + var server = new AuthorizationServer(AuthorizationServerMock); + var response = await server.HandleTokenRequestAsync(req, ct); + var authorization = server.DecodeRefreshToken(refreshTokenSource.Task.Result); + Assert.That(authorization, Is.Not.Null); + Assert.That(authorization.User, Is.EqualTo(ResourceOwnerUsername)); + return response; + }); + + var client = new WebServerClient(AuthorizationServerDescription); + try { + var authState = new AuthorizationState(TestScopes) { Callback = ClientCallback, }; + var authRedirectResponse = await client.PrepareRequestUserAuthorizationAsync(authState); + Uri authCompleteUri; + using (var httpClient = this.HostFactories.CreateHttpClient()) { + using (var response = await httpClient.GetAsync(authRedirectResponse.Headers.Location)) { + response.EnsureSuccessStatusCode(); + authCompleteUri = response.Headers.Location; } - }, - Handle(AuthorizationServerDescription.AuthorizationEndpoint).By( - async (req, ct) => { - var server = new AuthorizationServer(AuthorizationServerMock); - var request = await server.ReadAuthorizationRequestAsync(req, ct); - Assert.That(request, Is.Not.Null); - var response = server.PrepareApproveAuthorizationRequest(request, ResourceOwnerUsername); - return await server.Channel.PrepareResponseAsync(response); - }), - Handle(AuthorizationServerDescription.TokenEndpoint).By( - async (req, ct) => { - var server = new AuthorizationServer(AuthorizationServerMock); - var response = await server.HandleTokenRequestAsync(req, ct); - var authorization = server.DecodeRefreshToken(refreshTokenSource.Task.Result); - Assert.That(authorization, Is.Not.Null); - Assert.That(authorization.User, Is.EqualTo(ResourceOwnerUsername)); - return response; - })); - await coordinator.RunAsync(); + } + + var authCompleteRequest = new HttpRequestMessage(HttpMethod.Get, authCompleteUri); + authCompleteRequest.Headers.Add("Cookie", string.Join("; ", authRedirectResponse.Headers.GetValues("Set-Cookie"))); + var result = await client.ProcessUserAuthorizationAsync(authCompleteRequest); + Assert.That(result.AccessToken, Is.Not.Null.And.Not.Empty); + Assert.That(result.RefreshToken, Is.Not.Null.And.Not.Empty); + refreshTokenSource.SetResult(result.RefreshToken); + } catch { + refreshTokenSource.TrySetCanceled(); + } } [Test] @@ -104,21 +98,15 @@ namespace DotNetOpenAuth.Test.OAuth2 { return response; }); - // AuthorizationServerDescription, - //authServerMock.Object, - //new WebServerClient(AuthorizationServerDescription), - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var client = new WebServerClient(AuthorizationServerDescription, hostFactories: hostFactories); - var result = await client.ExchangeUserCredentialForTokenAsync(ResourceOwnerUsername, ResourceOwnerPassword, clientRequestedScopes, ct); - Assert.That(result.Scope, Is.EquivalentTo(serverOverriddenScopes)); - }, - Handle(AuthorizationServerDescription.TokenEndpoint).By( - async (req, ct) => { - var server = new AuthorizationServer(authServerMock.Object); - return await server.HandleTokenRequestAsync(req, ct); - })); - await coordinator.RunAsync(); + Handle(AuthorizationServerDescription.TokenEndpoint).By( + async (req, ct) => { + var server = new AuthorizationServer(authServerMock.Object); + return await server.HandleTokenRequestAsync(req, ct); + }); + + var client = new WebServerClient(AuthorizationServerDescription, hostFactories: this.HostFactories); + var result = await client.ExchangeUserCredentialForTokenAsync(ResourceOwnerUsername, ResourceOwnerPassword, clientRequestedScopes); + Assert.That(result.Scope, Is.EquivalentTo(serverOverriddenScopes)); } [Test] @@ -131,18 +119,16 @@ namespace DotNetOpenAuth.Test.OAuth2 { Assert.That(req.UserName, Is.EqualTo(ResourceOwnerUsername)); return response; }); - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var client = new WebServerClient(AuthorizationServerDescription, hostFactories: hostFactories); - var result = await client.ExchangeUserCredentialForTokenAsync(ResourceOwnerUsername, ResourceOwnerPassword, TestScopes, ct); - Assert.That(result.AccessToken, Is.Not.Null); - }, - Handle(AuthorizationServerDescription.TokenEndpoint).By( - async (req, ct) => { - var server = new AuthorizationServer(authServerMock.Object); - return await server.HandleTokenRequestAsync(req, ct); - })); - await coordinator.RunAsync(); + + Handle(AuthorizationServerDescription.TokenEndpoint).By( + async (req, ct) => { + var server = new AuthorizationServer(authServerMock.Object); + return await server.HandleTokenRequestAsync(req, ct); + }); + + var client = new WebServerClient(AuthorizationServerDescription, hostFactories: this.HostFactories); + var result = await client.ExchangeUserCredentialForTokenAsync(ResourceOwnerUsername, ResourceOwnerPassword, TestScopes); + Assert.That(result.AccessToken, Is.Not.Null); } [Test] @@ -154,18 +140,16 @@ namespace DotNetOpenAuth.Test.OAuth2 { Assert.That(req.UserName, Is.Null); return new AutomatedAuthorizationCheckResponse(req, true); }); - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var client = new WebServerClient(AuthorizationServerDescription, hostFactories: hostFactories); - var result = await client.GetClientAccessTokenAsync(TestScopes, ct); - Assert.That(result.AccessToken, Is.Not.Null); - }, - Handle(AuthorizationServerDescription.TokenEndpoint).By( - async (req, ct) => { - var server = new AuthorizationServer(authServerMock.Object); - return await server.HandleTokenRequestAsync(req, ct); - })); - await coordinator.RunAsync(); + + Handle(AuthorizationServerDescription.TokenEndpoint).By( + async (req, ct) => { + var server = new AuthorizationServer(authServerMock.Object); + return await server.HandleTokenRequestAsync(req, ct); + }); + + var client = new WebServerClient(AuthorizationServerDescription, hostFactories: this.HostFactories); + var result = await client.GetClientAccessTokenAsync(TestScopes); + Assert.That(result.AccessToken, Is.Not.Null); } [Test] @@ -177,40 +161,38 @@ namespace DotNetOpenAuth.Test.OAuth2 { Assert.That(req.User, Is.EqualTo(ResourceOwnerUsername)); return true; }); - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var client = new WebServerClient(AuthorizationServerDescription, hostFactories: hostFactories); - var authState = new AuthorizationState(TestScopes) { - Callback = ClientCallback, - }; - var authRedirectResponse = await client.PrepareRequestUserAuthorizationAsync(authState, ct); - Uri authCompleteUri; - using (var httpClient = hostFactories.CreateHttpClient()) { - using (var response = await httpClient.GetAsync(authRedirectResponse.Headers.Location)) { - response.EnsureSuccessStatusCode(); - authCompleteUri = response.Headers.Location; - } - } - var authCompleteRequest = new HttpRequestMessage(HttpMethod.Get, authCompleteUri); - var result = await client.ProcessUserAuthorizationAsync(authCompleteRequest, ct); - Assert.That(result.AccessToken, Is.Not.Null.And.Not.Empty); - Assert.That(result.RefreshToken, Is.Not.Null.And.Not.Empty); - }, - Handle(AuthorizationServerDescription.TokenEndpoint).By( - async (req, ct) => { - var server = new AuthorizationServer(authServerMock.Object); - var request = await server.ReadAuthorizationRequestAsync(req, ct); - Assert.That(request, Is.Not.Null); - var response = server.PrepareApproveAuthorizationRequest(request, ResourceOwnerUsername); - return await server.Channel.PrepareResponseAsync(response); - }), - Handle(AuthorizationServerDescription.TokenEndpoint).By( - async (req, ct) => { - var server = new AuthorizationServer(authServerMock.Object); - return await server.HandleTokenRequestAsync(req, ct); - })); - await coordinator.RunAsync(); + Handle(AuthorizationServerDescription.TokenEndpoint).By( + async (req, ct) => { + var server = new AuthorizationServer(authServerMock.Object); + var request = await server.ReadAuthorizationRequestAsync(req, ct); + Assert.That(request, Is.Not.Null); + var response = server.PrepareApproveAuthorizationRequest(request, ResourceOwnerUsername); + return await server.Channel.PrepareResponseAsync(response); + }); + Handle(AuthorizationServerDescription.TokenEndpoint).By( + async (req, ct) => { + var server = new AuthorizationServer(authServerMock.Object); + return await server.HandleTokenRequestAsync(req, ct); + }); + + var client = new WebServerClient(AuthorizationServerDescription, hostFactories: this.HostFactories); + var authState = new AuthorizationState(TestScopes) { + Callback = ClientCallback, + }; + var authRedirectResponse = await client.PrepareRequestUserAuthorizationAsync(authState); + Uri authCompleteUri; + using (var httpClient = this.HostFactories.CreateHttpClient()) { + using (var response = await httpClient.GetAsync(authRedirectResponse.Headers.Location)) { + response.EnsureSuccessStatusCode(); + authCompleteUri = response.Headers.Location; + } + } + + var authCompleteRequest = new HttpRequestMessage(HttpMethod.Get, authCompleteUri); + var result = await client.ProcessUserAuthorizationAsync(authCompleteRequest); + Assert.That(result.AccessToken, Is.Not.Null.And.Not.Empty); + Assert.That(result.RefreshToken, Is.Not.Null.And.Not.Empty); } [Test] @@ -226,21 +208,19 @@ namespace DotNetOpenAuth.Test.OAuth2 { response.ApprovedScope.UnionWith(serverOverriddenScopes); return response; }); - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var client = new WebServerClient(AuthorizationServerDescription, hostFactories: hostFactories); - var authState = new AuthorizationState(TestScopes) { - Callback = ClientCallback, - }; - var result = await client.GetClientAccessTokenAsync(clientRequestedScopes, ct); - Assert.That(result.Scope, Is.EquivalentTo(serverOverriddenScopes)); - }, - Handle(AuthorizationServerDescription.TokenEndpoint).By( - async (req, ct) => { - var server = new AuthorizationServer(authServerMock.Object); - return await server.HandleTokenRequestAsync(req, ct); - })); - await coordinator.RunAsync(); + + Handle(AuthorizationServerDescription.TokenEndpoint).By( + async (req, ct) => { + var server = new AuthorizationServer(authServerMock.Object); + return await server.HandleTokenRequestAsync(req, ct); + }); + + var client = new WebServerClient(AuthorizationServerDescription, hostFactories: this.HostFactories); + ////var authState = new AuthorizationState(TestScopes) { + //// Callback = ClientCallback, + ////}; + var result = await client.GetClientAccessTokenAsync(clientRequestedScopes); + Assert.That(result.Scope, Is.EquivalentTo(serverOverriddenScopes)); } } } diff --git a/src/DotNetOpenAuth.Test/OAuth2/ResourceServerTests.cs b/src/DotNetOpenAuth.Test/OAuth2/ResourceServerTests.cs index d4618cf..55b333d 100644 --- a/src/DotNetOpenAuth.Test/OAuth2/ResourceServerTests.cs +++ b/src/DotNetOpenAuth.Test/OAuth2/ResourceServerTests.cs @@ -91,19 +91,18 @@ namespace DotNetOpenAuth.Test.OAuth2 { authServer.Setup( a => a.CheckAuthorizeClientCredentialsGrant(It.Is<IAccessTokenRequest>(d => d.ClientIdentifier == ClientId && MessagingUtilities.AreEquivalent(d.Scope, TestScopes)))) .Returns<IAccessTokenRequest>(req => new AutomatedAuthorizationCheckResponse(req, true)); - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var client = new WebServerClient(AuthorizationServerDescription); - var authState = await client.GetClientAccessTokenAsync(TestScopes, ct); - Assert.That(authState.AccessToken, Is.Not.Null.And.Not.Empty); - Assert.That(authState.RefreshToken, Is.Null); - accessToken = authState.AccessToken; - }, - Handle(AuthorizationServerDescription.TokenEndpoint).By(async (req, ct) => { + + Handle(AuthorizationServerDescription.TokenEndpoint).By( + async (req, ct) => { var server = new AuthorizationServer(authServer.Object); return await server.HandleTokenRequestAsync(req, ct); - })); - await coordinator.RunAsync(); + }); + + var client = new WebServerClient(AuthorizationServerDescription, hostFactories: this.HostFactories); + var authState = await client.GetClientAccessTokenAsync(TestScopes); + Assert.That(authState.AccessToken, Is.Not.Null.And.Not.Empty); + Assert.That(authState.RefreshToken, Is.Null); + accessToken = authState.AccessToken; return accessToken; } diff --git a/src/DotNetOpenAuth.Test/OAuth2/UserAgentClientAuthorizeTests.cs b/src/DotNetOpenAuth.Test/OAuth2/UserAgentClientAuthorizeTests.cs index eaa0d44..c911416 100644 --- a/src/DotNetOpenAuth.Test/OAuth2/UserAgentClientAuthorizeTests.cs +++ b/src/DotNetOpenAuth.Test/OAuth2/UserAgentClientAuthorizeTests.cs @@ -10,6 +10,7 @@ namespace DotNetOpenAuth.Test.OAuth2 { using System.Linq; using System.Net.Http; using System.Text; + using System.Threading; using System.Threading.Tasks; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; @@ -23,79 +24,74 @@ namespace DotNetOpenAuth.Test.OAuth2 { public class UserAgentClientAuthorizeTests : OAuth2TestBase { [Test] public async Task AuthorizationCodeGrant() { - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var client = new UserAgentClient(AuthorizationServerDescription); - var authState = new AuthorizationState(TestScopes) { - Callback = ClientCallback, - }; - var request = client.PrepareRequestUserAuthorization(authState); - Assert.AreEqual(EndUserAuthorizationResponseType.AuthorizationCode, request.ResponseType); - var authRequestRedirect = await client.Channel.PrepareResponseAsync(request, ct); - Uri authRequestResponse; - using (var httpClient = hostFactories.CreateHttpClient()) { - using (var httpResponse = await httpClient.GetAsync(authRequestRedirect.Headers.Location, ct)) { - authRequestResponse = httpResponse.Headers.Location; - } + Handle(AuthorizationServerDescription.AuthorizationEndpoint).By( + async (req, ct) => { + var server = new AuthorizationServer(AuthorizationServerMock); + var request = await server.ReadAuthorizationRequestAsync(req, ct); + Assert.That(request, Is.Not.Null); + var response = server.PrepareApproveAuthorizationRequest(request, ResourceOwnerUsername); + return await server.Channel.PrepareResponseAsync(response, ct); + }); + Handle(AuthorizationServerDescription.TokenEndpoint).By( + async (req, ct) => { + var server = new AuthorizationServer(AuthorizationServerMock); + return await server.HandleTokenRequestAsync(req, ct); + }); + { + var client = new UserAgentClient(AuthorizationServerDescription); + var authState = new AuthorizationState(TestScopes) { Callback = ClientCallback, }; + var request = client.PrepareRequestUserAuthorization(authState); + Assert.AreEqual(EndUserAuthorizationResponseType.AuthorizationCode, request.ResponseType); + var authRequestRedirect = await client.Channel.PrepareResponseAsync(request); + Uri authRequestResponse; + using (var httpClient = this.HostFactories.CreateHttpClient()) { + using (var httpResponse = await httpClient.GetAsync(authRequestRedirect.Headers.Location)) { + authRequestResponse = httpResponse.Headers.Location; } - var incoming = await client.Channel.ReadFromRequestAsync(new HttpRequestMessage(HttpMethod.Get, authRequestResponse), ct); - var result = await client.ProcessUserAuthorizationAsync(authState, incoming, ct); - Assert.That(result.AccessToken, Is.Not.Null.And.Not.Empty); - Assert.That(result.RefreshToken, Is.Not.Null.And.Not.Empty); - }, - Handle(AuthorizationServerDescription.AuthorizationEndpoint).By( - async (req, ct) => { - var server = new AuthorizationServer(AuthorizationServerMock); - var request = await server.ReadAuthorizationRequestAsync(req, ct); - Assert.That(request, Is.Not.Null); - var response = server.PrepareApproveAuthorizationRequest(request, ResourceOwnerUsername); - return await server.Channel.PrepareResponseAsync(response, ct); - }), - Handle(AuthorizationServerDescription.TokenEndpoint).By( - async (req, ct) => { - var server = new AuthorizationServer(AuthorizationServerMock); - return await server.HandleTokenRequestAsync(req, ct); - })); - await coordinator.RunAsync(); + } + var incoming = + await + client.Channel.ReadFromRequestAsync( + new HttpRequestMessage(HttpMethod.Get, authRequestResponse), CancellationToken.None); + var result = await client.ProcessUserAuthorizationAsync(authState, incoming, CancellationToken.None); + Assert.That(result.AccessToken, Is.Not.Null.And.Not.Empty); + Assert.That(result.RefreshToken, Is.Not.Null.And.Not.Empty); + } } [Test] public async Task ImplicitGrant() { var coordinatorClient = new UserAgentClient(AuthorizationServerDescription); - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var client = new UserAgentClient(AuthorizationServerDescription); - var authState = new AuthorizationState(TestScopes) { - Callback = ClientCallback, - }; - var request = client.PrepareRequestUserAuthorization(authState, implicitResponseType: true); - Assert.That(request.ResponseType, Is.EqualTo(EndUserAuthorizationResponseType.AccessToken)); - var authRequestRedirect = await client.Channel.PrepareResponseAsync(request, ct); - Uri authRequestResponse; - using (var httpClient = hostFactories.CreateHttpClient()) { - using (var httpResponse = await httpClient.GetAsync(authRequestRedirect.Headers.Location, ct)) { - authRequestResponse = httpResponse.Headers.Location; - } + coordinatorClient.ClientCredentialApplicator = null; // implicit grant clients don't need a secret. + Handle(AuthorizationServerDescription.AuthorizationEndpoint).By( + async (req, ct) => { + var server = new AuthorizationServer(AuthorizationServerMock); + var request = await server.ReadAuthorizationRequestAsync(req, ct); + Assert.That(request, Is.Not.Null); + IAccessTokenRequest accessTokenRequest = (EndUserAuthorizationImplicitRequest)request; + Assert.That(accessTokenRequest.ClientAuthenticated, Is.False); + var response = server.PrepareApproveAuthorizationRequest(request, ResourceOwnerUsername); + return await server.Channel.PrepareResponseAsync(response, ct); + }); + { + var client = new UserAgentClient(AuthorizationServerDescription); + var authState = new AuthorizationState(TestScopes) { Callback = ClientCallback, }; + var request = client.PrepareRequestUserAuthorization(authState, implicitResponseType: true); + Assert.That(request.ResponseType, Is.EqualTo(EndUserAuthorizationResponseType.AccessToken)); + var authRequestRedirect = await client.Channel.PrepareResponseAsync(request); + Uri authRequestResponse; + using (var httpClient = this.HostFactories.CreateHttpClient()) { + using (var httpResponse = await httpClient.GetAsync(authRequestRedirect.Headers.Location)) { + authRequestResponse = httpResponse.Headers.Location; } + } - var incoming = await client.Channel.ReadFromRequestAsync(new HttpRequestMessage(HttpMethod.Get, authRequestResponse), ct); - var result = await client.ProcessUserAuthorizationAsync(authState, incoming, ct); - Assert.That(result.AccessToken, Is.Not.Null.And.Not.Empty); - Assert.That(result.RefreshToken, Is.Null); - }, - Handle(AuthorizationServerDescription.AuthorizationEndpoint).By( - async (req, ct) => { - var server = new AuthorizationServer(AuthorizationServerMock); - var request = await server.ReadAuthorizationRequestAsync(req, ct); - Assert.That(request, Is.Not.Null); - IAccessTokenRequest accessTokenRequest = (EndUserAuthorizationImplicitRequest)request; - Assert.That(accessTokenRequest.ClientAuthenticated, Is.False); - var response = server.PrepareApproveAuthorizationRequest(request, ResourceOwnerUsername); - return await server.Channel.PrepareResponseAsync(response, ct); - })); - - coordinatorClient.ClientCredentialApplicator = null; // implicit grant clients don't need a secret. - await coordinator.RunAsync(); + var incoming = + await client.Channel.ReadFromRequestAsync(new HttpRequestMessage(HttpMethod.Get, authRequestResponse), CancellationToken.None); + var result = await client.ProcessUserAuthorizationAsync(authState, incoming, CancellationToken.None); + Assert.That(result.AccessToken, Is.Not.Null.And.Not.Empty); + Assert.That(result.RefreshToken, Is.Null); + } } } } diff --git a/src/DotNetOpenAuth.Test/OAuth2/WebServerClientAuthorizeTests.cs b/src/DotNetOpenAuth.Test/OAuth2/WebServerClientAuthorizeTests.cs index 7b5c32e..2befd35 100644 --- a/src/DotNetOpenAuth.Test/OAuth2/WebServerClientAuthorizeTests.cs +++ b/src/DotNetOpenAuth.Test/OAuth2/WebServerClientAuthorizeTests.cs @@ -11,6 +11,7 @@ namespace DotNetOpenAuth.Test.OAuth2 { using System.Net; using System.Net.Http; using System.Text; + using System.Threading; using System.Threading.Tasks; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2; @@ -23,37 +24,35 @@ namespace DotNetOpenAuth.Test.OAuth2 { public class WebServerClientAuthorizeTests : OAuth2TestBase { [Test] public async Task AuthorizationCodeGrant() { - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var client = new WebServerClient(AuthorizationServerDescription); - var authState = new AuthorizationState(TestScopes) { - Callback = ClientCallback, - }; - var authRequestRedirect = await client.PrepareRequestUserAuthorizationAsync(authState, ct); - Uri authRequestResponse; - using (var httpClient = hostFactories.CreateHttpClient()) { - using (var httpResponse = await httpClient.GetAsync(authRequestRedirect.Headers.Location, ct)) { - authRequestResponse = httpResponse.Headers.Location; - } - } + Handle(AuthorizationServerDescription.AuthorizationEndpoint).By( + async (req, ct) => { + var server = new AuthorizationServer(AuthorizationServerMock); + var request = await server.ReadAuthorizationRequestAsync(req, ct); + Assert.That(request, Is.Not.Null); + var response = server.PrepareApproveAuthorizationRequest(request, ResourceOwnerUsername); + return await server.Channel.PrepareResponseAsync(response, ct); + }); + Handle(AuthorizationServerDescription.TokenEndpoint).By( + async (req, ct) => { + var server = new AuthorizationServer(AuthorizationServerMock); + return await server.HandleTokenRequestAsync(req, ct); + }); + + var client = new WebServerClient(AuthorizationServerDescription); + var authState = new AuthorizationState(TestScopes) { + Callback = ClientCallback, + }; + var authRequestRedirect = await client.PrepareRequestUserAuthorizationAsync(authState); + Uri authRequestResponse; + using (var httpClient = this.HostFactories.CreateHttpClient()) { + using (var httpResponse = await httpClient.GetAsync(authRequestRedirect.Headers.Location)) { + authRequestResponse = httpResponse.Headers.Location; + } + } - var result = await client.ProcessUserAuthorizationAsync(new HttpRequestMessage(HttpMethod.Get, authRequestResponse), ct); - Assert.That(result.AccessToken, Is.Not.Null.And.Not.Empty); - Assert.That(result.RefreshToken, Is.Not.Null.And.Not.Empty); - }, - Handle(AuthorizationServerDescription.AuthorizationEndpoint).By( - async (req, ct) => { - var server = new AuthorizationServer(AuthorizationServerMock); - var request = await server.ReadAuthorizationRequestAsync(req, ct); - Assert.That(request, Is.Not.Null); - var response = server.PrepareApproveAuthorizationRequest(request, ResourceOwnerUsername); - return await server.Channel.PrepareResponseAsync(response, ct); - }), - Handle(AuthorizationServerDescription.TokenEndpoint).By(async (req, ct) => { - var server = new AuthorizationServer(AuthorizationServerMock); - return await server.HandleTokenRequestAsync(req, ct); - })); - await coordinator.RunAsync(); + var result = await client.ProcessUserAuthorizationAsync(new HttpRequestMessage(HttpMethod.Get, authRequestResponse), CancellationToken.None); + Assert.That(result.AccessToken, Is.Not.Null.And.Not.Empty); + Assert.That(result.RefreshToken, Is.Not.Null.And.Not.Empty); } [Theory] @@ -69,22 +68,19 @@ namespace DotNetOpenAuth.Test.OAuth2 { MessagingUtilities.AreEquivalent(d.Scope, TestScopes)))).Returns(true); } - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var client = new WebServerClient(AuthorizationServerDescription); - if (anonymousClient) { - client.ClientIdentifier = null; - } + Handle(AuthorizationServerDescription.TokenEndpoint).By(async (req, ct) => { + var server = new AuthorizationServer(authHostMock.Object); + return await server.HandleTokenRequestAsync(req, ct); + }); - var authState = await client.ExchangeUserCredentialForTokenAsync(ResourceOwnerUsername, ResourceOwnerPassword, TestScopes, ct); - Assert.That(authState.AccessToken, Is.Not.Null.And.Not.Empty); - Assert.That(authState.RefreshToken, Is.Not.Null.And.Not.Empty); - }, - Handle(AuthorizationServerDescription.TokenEndpoint).By(async (req, ct) => { - var server = new AuthorizationServer(authHostMock.Object); - return await server.HandleTokenRequestAsync(req, ct); - })); - await coordinator.RunAsync(); + var client = new WebServerClient(AuthorizationServerDescription); + if (anonymousClient) { + client.ClientIdentifier = null; + } + + var authState = await client.ExchangeUserCredentialForTokenAsync(ResourceOwnerUsername, ResourceOwnerPassword, TestScopes); + Assert.That(authState.AccessToken, Is.Not.Null.And.Not.Empty); + Assert.That(authState.RefreshToken, Is.Not.Null.And.Not.Empty); } [Test] @@ -96,18 +92,15 @@ namespace DotNetOpenAuth.Test.OAuth2 { authServer.Setup( a => a.CheckAuthorizeClientCredentialsGrant(It.Is<IAccessTokenRequest>(d => d.ClientIdentifier == ClientId && MessagingUtilities.AreEquivalent(d.Scope, TestScopes)))) .Returns<IAccessTokenRequest>(req => new AutomatedAuthorizationCheckResponse(req, true)); - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var client = new WebServerClient(AuthorizationServerDescription); - var authState = await client.GetClientAccessTokenAsync(TestScopes, ct); - Assert.That(authState.AccessToken, Is.Not.Null.And.Not.Empty); - Assert.That(authState.RefreshToken, Is.Null); - }, - Handle(AuthorizationServerDescription.TokenEndpoint).By(async (req, ct) => { + Handle(AuthorizationServerDescription.TokenEndpoint).By( + async (req, ct) => { var server = new AuthorizationServer(authServer.Object); return await server.HandleTokenRequestAsync(req, ct); - })); - await coordinator.RunAsync(); + }); + var client = new WebServerClient(AuthorizationServerDescription); + var authState = await client.GetClientAccessTokenAsync(TestScopes); + Assert.That(authState.AccessToken, Is.Not.Null.And.Not.Empty); + Assert.That(authState.RefreshToken, Is.Null); } [Test] @@ -124,17 +117,15 @@ namespace DotNetOpenAuth.Test.OAuth2 { response.ApprovedScope.ResetContents(approvedScopes); return response; }); - var coordinator = new CoordinatorBase( - async (hostFactories, ct) => { - var client = new WebServerClient(AuthorizationServerDescription); - var authState = await client.GetClientAccessTokenAsync(TestScopes, ct); - Assert.That(authState.Scope, Is.EquivalentTo(approvedScopes)); - }, - Handle(AuthorizationServerDescription.TokenEndpoint).By(async (req, ct) => { + Handle(AuthorizationServerDescription.TokenEndpoint).By( + async (req, ct) => { var server = new AuthorizationServer(authServer.Object); return await server.HandleTokenRequestAsync(req, ct); - })); - await coordinator.RunAsync(); + }); + + var client = new WebServerClient(AuthorizationServerDescription); + var authState = await client.GetClientAccessTokenAsync(TestScopes); + Assert.That(authState.Scope, Is.EquivalentTo(approvedScopes)); } [Test] |