Browse Source

Use the generic host builder on .NET Core 3.1

pull/966/head
Kévin Chalet 6 years ago
committed by GitHub
parent
commit
8021c15328
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddict.Server.AspNetCore.IntegrationTests.csproj
  2. 64
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTestServer.cs
  3. 7
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Authentication.cs
  4. 4
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Exchange.cs
  5. 4
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Introspection.cs
  6. 4
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Revocation.cs
  7. 7
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Session.cs
  8. 83
      test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.cs
  9. 9
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestClient.cs
  10. 21
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestServer.cs
  11. 210
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Authentication.cs
  12. 207
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Discovery.cs
  13. 290
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Exchange.cs
  14. 150
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Introspection.cs
  15. 102
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Revocation.cs
  16. 74
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Session.cs
  17. 77
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Userinfo.cs
  18. 350
      test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.cs
  19. 38
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTestServer.cs
  20. 7
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Authentication.cs
  21. 4
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Exchange.cs
  22. 4
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Introspection.cs
  23. 4
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Revocation.cs
  24. 7
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Session.cs
  25. 37
      test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.cs

5
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddict.Server.AspNetCore.IntegrationTests.csproj

@ -21,4 +21,9 @@
<Reference Include="System.Net.Http" />
</ItemGroup>
<PropertyGroup Condition=" '$(TargetFramework)' != 'net461' And '$(TargetFramework)' != 'net472' And
'$(TargetFramework)' != 'netcoreapp2.1'">
<DefineConstants>$(DefineConstants);SUPPORTS_GENERIC_HOST</DefineConstants>
</PropertyGroup>
</Project>

64
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTestServer.cs

@ -0,0 +1,64 @@
/*
* Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
* See https://github.com/openiddict/openiddict-core for more information concerning
* the license and the contributors participating to this project.
*/
using System.Threading.Tasks;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using OpenIddict.Server.FunctionalTests;
namespace OpenIddict.Server.AspNetCore.FunctionalTests
{
/// <summary>
/// Represents a test host used by the server integration tests.
/// </summary>
public class OpenIddictServerAspNetCoreIntegrationTestServer : OpenIddictServerIntegrationTestServer
{
public OpenIddictServerAspNetCoreIntegrationTestServer(TestServer server)
=> Server = server;
#if SUPPORTS_GENERIC_HOST
public OpenIddictServerAspNetCoreIntegrationTestServer(IHost host)
{
Host = host;
Server = host.GetTestServer();
}
#endif
/// <summary>
/// Gets the ASP.NET Core test server used by this instance.
/// </summary>
public TestServer Server { get; }
#if SUPPORTS_GENERIC_HOST
/// <summary>
/// Gets the generic host used by this instance.
/// </summary>
public IHost Host { get; }
#endif
public override ValueTask<OpenIddictServerIntegrationTestClient> CreateClientAsync()
=> new ValueTask<OpenIddictServerIntegrationTestClient>(
new OpenIddictServerIntegrationTestClient(Server.CreateClient()));
public override
#if SUPPORTS_GENERIC_HOST
async
#endif
ValueTask DisposeAsync()
{
// Dispose of the underlying test server.
Server.Dispose();
#if SUPPORTS_GENERIC_HOST
// Stop and dispose of the underlying generic host.
await Host.StopAsync();
Host.Dispose();
#else
return default;
#endif
}
}
}

7
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Authentication.cs

@ -19,7 +19,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractAuthorizationRequest_RequestIdParameterIsRejectedWhenRequestCachingIsDisabled()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -36,7 +37,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractAuthorizationRequest_InvalidRequestIdParameterIsRejected()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddDistributedMemoryCache();
@ -44,6 +45,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
.EnableAuthorizationEndpointCaching();
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{

4
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Exchange.cs

@ -21,7 +21,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractTokenRequest_MultipleClientCredentialsCauseAnError()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -39,6 +39,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/token", new OpenIddictRequest
{

4
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Introspection.cs

@ -21,7 +21,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractIntrospectionRequest_MultipleClientCredentialsCauseAnError()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -39,6 +39,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{

4
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Revocation.cs

@ -21,7 +21,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractRevocationRequest_MultipleClientCredentialsCauseAnError()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -39,6 +39,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{

7
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.Session.cs

@ -19,7 +19,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractLogoutRequest_RequestIdParameterIsRejectedWhenRequestCachingIsDisabled()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
@ -36,7 +37,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ExtractLogoutRequest_InvalidRequestIdParameterIsRejected()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddDistributedMemoryCache();
@ -44,6 +45,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
.EnableLogoutEndpointCaching();
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
{

83
test/OpenIddict.Server.AspNetCore.IntegrationTests/OpenIddictServerAspNetCoreIntegrationTests.cs

@ -16,6 +16,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using OpenIddict.Abstractions;
using OpenIddict.Server.FunctionalTests;
using Xunit;
@ -31,7 +32,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessChallenge_ReturnsParametersFromAuthenticationProperties()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
options.SetTokenEndpointUris("/challenge/custom");
@ -45,6 +46,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/challenge/custom", new OpenIddictRequest
{
@ -70,7 +73,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessChallenge_ReturnsErrorFromAuthenticationProperties()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
options.SetTokenEndpointUris("/challenge/custom");
@ -84,6 +87,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/challenge/custom", new OpenIddictRequest
{
@ -168,10 +173,10 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
[InlineData("/.WELL-KNOWN/JWKS/SUBPATH", OpenIddictServerEndpointType.Unknown)]
[InlineData("/.well-known/jwks/subpath/", OpenIddictServerEndpointType.Unknown)]
[InlineData("/.WELL-KNOWN/JWKS/SUBPATH/", OpenIddictServerEndpointType.Unknown)]
public Task ProcessRequest_MatchesCorrespondingEndpoint(string path, OpenIddictServerEndpointType type)
public async Task ProcessRequest_MatchesCorrespondingEndpoint(string path, OpenIddictServerEndpointType type)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -185,8 +190,10 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
return client.PostAsync(path, new OpenIddictRequest());
await client.PostAsync(path, new OpenIddictRequest());
}
[Theory]
@ -199,10 +206,10 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
[InlineData("/custom/connect/userinfo", OpenIddictServerEndpointType.Userinfo)]
[InlineData("/custom/.well-known/openid-configuration", OpenIddictServerEndpointType.Configuration)]
[InlineData("/custom/.well-known/jwks", OpenIddictServerEndpointType.Cryptography)]
public Task ProcessRequest_AllowsOverridingEndpoint(string address, OpenIddictServerEndpointType type)
public async Task ProcessRequest_AllowsOverridingEndpoint(string address, OpenIddictServerEndpointType type)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -223,8 +230,10 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
return client.PostAsync(address, new OpenIddictRequest());
await client.PostAsync(address, new OpenIddictRequest());
}
[Theory]
@ -239,7 +248,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessRequest_RejectsInsecureHttpRequests(string address)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -247,6 +256,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
.Configure(options => options.DisableTransportSecurityRequirement = false);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync(address, new OpenIddictRequest());
@ -268,7 +279,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessRequest_AllowsHandlingResponse(string address)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -286,6 +297,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync(address, new OpenIddictRequest());
@ -306,7 +319,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessRequest_AllowsSkippingHandler(string address)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -319,6 +332,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync(address, new OpenIddictRequest());
@ -330,7 +345,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessSignIn_ReturnsParametersFromAuthenticationProperties()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
options.SetTokenEndpointUris("/signin/custom");
@ -344,6 +359,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/signin/custom", new OpenIddictRequest
{
@ -369,7 +386,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
public async Task ProcessSignOut_ReturnsParametersFromAuthenticationProperties()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
options.SetLogoutEndpointUris("/signout/custom");
@ -383,6 +400,8 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/signout/custom", new OpenIddictRequest
{
@ -396,10 +415,17 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
Assert.Equal("Bob l'Eponge", (string) response["string_parameter"]);
}
protected override OpenIddictServerIntegrationTestClient CreateClient(Action<OpenIddictServerBuilder> configuration = null)
protected override
#if SUPPORTS_GENERIC_HOST
async
#endif
ValueTask<OpenIddictServerIntegrationTestServer> CreateServerAsync(Action<OpenIddictServerBuilder> configuration = null)
{
#if SUPPORTS_GENERIC_HOST
var builder = new HostBuilder();
#else
var builder = new WebHostBuilder();
#endif
builder.UseEnvironment("Testing");
builder.ConfigureServices(ConfigureServices);
@ -416,7 +442,27 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
});
});
builder.Configure(app =>
#if SUPPORTS_GENERIC_HOST
builder.ConfigureWebHost(options =>
{
options.UseTestServer();
options.Configure(ConfigurePipeline);
});
#else
builder.Configure(ConfigurePipeline);
#endif
#if SUPPORTS_GENERIC_HOST
var host = await builder.StartAsync();
return new OpenIddictServerAspNetCoreIntegrationTestServer(host);
#else
var server = new TestServer(builder);
return new ValueTask<OpenIddictServerIntegrationTestServer>(new OpenIddictServerAspNetCoreIntegrationTestServer(server));
#endif
void ConfigurePipeline(IApplicationBuilder app)
{
app.Use(next => async context =>
{
@ -544,10 +590,7 @@ namespace OpenIddict.Server.AspNetCore.FunctionalTests
name = "Bob le Magnifique"
}));
});
});
var server = new TestServer(builder);
return new OpenIddictServerIntegrationTestClient(server.CreateClient());
}
}
}
}

9
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestClient.cs

@ -23,7 +23,7 @@ namespace OpenIddict.Server.FunctionalTests
/// Exposes methods that allow sending OpenID Connect
/// requests and extracting the corresponding responses.
/// </summary>
public class OpenIddictServerIntegrationTestClient
public class OpenIddictServerIntegrationTestClient : IAsyncDisposable
{
/// <summary>
/// Initializes a new instance of the OpenID Connect client.
@ -500,5 +500,12 @@ namespace OpenIddict.Server.FunctionalTests
return new OpenIddictResponse();
}
public ValueTask DisposeAsync()
{
HttpClient.Dispose();
return default;
}
}
}

21
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestServer.cs

@ -0,0 +1,21 @@
/*
* Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
* See https://github.com/openiddict/openiddict-core for more information concerning
* the license and the contributors participating to this project.
*/
using System;
using System.Threading.Tasks;
namespace OpenIddict.Server.FunctionalTests
{
/// <summary>
/// Represents a test host used by the server integration tests.
/// </summary>
public abstract class OpenIddictServerIntegrationTestServer : IAsyncDisposable
{
public abstract ValueTask<OpenIddictServerIntegrationTestClient> CreateClientAsync();
public virtual ValueTask DisposeAsync() => default;
}
}

210
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Authentication.cs

@ -32,7 +32,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractAuthorizationRequest_UnexpectedMethodReturnsAnError(string method)
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.SendAsync(method, "/connect/authorize", new OpenIddictRequest());
@ -46,7 +47,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractAuthorizationRequest_UnsupportedRequestParameterIsRejected()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -69,7 +71,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractAuthorizationRequest_UnsupportedRequestUriParameterIsRejected()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -97,7 +100,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractAuthorizationRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -110,6 +113,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/connect/authorize");
@ -123,7 +128,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractAuthorizationRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -141,6 +146,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/connect/authorize");
@ -152,7 +159,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractAuthorizationRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -165,6 +172,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/connect/authorize");
@ -176,7 +185,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingClientIdCausesAnError()
{
// Arrange
var client = CreateClient();
await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -193,7 +203,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingRedirectUriCausesAnErrorForOpenIdRequests()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -216,7 +227,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_InvalidRedirectUriCausesAnError(string address, string message)
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -235,7 +247,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingResponseTypeCausesAnError()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -261,7 +274,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_UnsafeResponseModeCausesAnError(string type, string mode)
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -288,7 +302,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingNonceCausesAnErrorForOpenIdRequests(string type)
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -312,7 +327,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingOpenIdScopeCausesAnErrorForOpenIdRequests(string type)
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -334,7 +350,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_InvalidPromptCausesAnError(string prompt)
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -364,7 +381,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_ValidPromptDoesNotCauseAnError(string prompt)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -378,6 +395,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -404,7 +423,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingCodeResponseTypeCausesAnErrorWhenCodeChallengeIsUsed(string type)
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -428,7 +448,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingCodeChallengeCausesAnErrorWhenCodeChallengeMethodIsSpecified()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -449,7 +470,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_InvalidCodeChallengeMethodCausesAnError()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -471,7 +493,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_NoneFlowIsRejected()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -490,7 +513,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_UnknownResponseTypeParameterIsRejected()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -519,11 +543,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenCorrespondingFlowIsDisabled(string flow, string type)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Configure(options => options.GrantTypes.Remove(flow));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -543,7 +569,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenUnregisteredScopeIsSpecified()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(CreateApplicationManager(mock =>
{
@ -568,6 +594,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -586,7 +614,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsValidatedWhenScopeRegisteredInOptionsIsSpecified()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.RegisterScopes("registered_scope");
options.SetRevocationEndpointUris(Array.Empty<Uri>());
@ -631,6 +659,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -652,7 +682,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsValidatedWhenRegisteredScopeIsSpecified()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
var scope = new OpenIddictScope();
@ -696,6 +726,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -717,11 +749,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestWithOfflineAccessScopeIsRejectedWhenRefreshTokenFlowIsDisabled()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Configure(options => options.GrantTypes.Remove(GrantTypes.RefreshToken));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -740,7 +774,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_UnknownResponseModeParameterIsRejected()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -760,7 +795,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenCodeChallengeMethodIsMissing()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -781,13 +817,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenCodeChallengeMethodIsNotEnabled()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
options.Services.PostConfigure<OpenIddictServerOptions>(options =>
options.CodeChallengeMethods.Clear());
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -807,7 +845,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenPlainCodeChallengeMethodIsNotExplicitlyEnabled()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -831,7 +870,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsValidatedWhenCodeChallengeMethodIsRegistered(string method)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
options.Configure(options => options.CodeChallengeMethods.Clear());
@ -847,6 +886,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -870,7 +911,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_PkceRequestWithForbiddenResponseTypeIsRejected(string type)
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -893,7 +935,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_RequestIsRejectedWhenRedirectUriIsMissing()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -913,7 +956,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_MissingRedirectUriCausesAnException()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act and assert
var exception = await Assert.ThrowsAsync<InvalidOperationException>(delegate
@ -934,7 +978,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_InvalidRedirectUriCausesAnException()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -947,6 +991,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act and assert
var exception = await Assert.ThrowsAsync<InvalidOperationException>(delegate
{
@ -973,11 +1019,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(value: null);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1012,11 +1060,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1054,13 +1104,15 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
options.Configure(options => options.IgnoreEndpointPermissions = false);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1128,13 +1180,15 @@ namespace OpenIddict.Server.FunctionalTests
}
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
options.Configure(options => options.IgnoreGrantTypePermissions = false);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1176,13 +1230,15 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
options.Configure(options => options.IgnoreGrantTypePermissions = false);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1215,11 +1271,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1259,13 +1317,15 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
options.RegisterScopes(Scopes.Email, Scopes.Profile);
options.Configure(options => options.IgnoreScopePermissions = false);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1308,11 +1368,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1351,7 +1413,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.SetRevocationEndpointUris(Array.Empty<Uri>());
options.DisableAuthorizationStorage();
@ -1370,6 +1432,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1407,7 +1471,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.SetRevocationEndpointUris(Array.Empty<Uri>());
options.DisableAuthorizationStorage();
@ -1426,6 +1490,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1455,7 +1521,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1468,6 +1534,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1487,7 +1555,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1505,6 +1573,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1522,7 +1592,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateAuthorizationRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1535,6 +1605,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1559,7 +1631,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleAuthorizationRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1572,6 +1644,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1591,7 +1665,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleAuthorizationRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1609,6 +1683,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1626,7 +1702,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleAuthorizationRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1639,6 +1715,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1663,7 +1741,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyAuthorizationResponse_ResponseModeIsAutomaticallyInferred(string type, string mode)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1685,6 +1763,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1703,7 +1783,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyAuthorizationResponse_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1730,6 +1810,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1747,7 +1829,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyAuthorizationResponse_ResponseContainsCustomParameters()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1774,6 +1856,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1796,7 +1880,7 @@ namespace OpenIddict.Server.FunctionalTests
// To emulate this behavior, the error property is manually set to null.
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1809,6 +1893,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act and assert
var exception = await Assert.ThrowsAsync<InvalidOperationException>(delegate
{
@ -1826,7 +1912,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyAuthorizationResponse_DoesNotSetStateWhenUserIsNotRedirected()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1848,6 +1934,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1864,7 +1952,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyAuthorizationResponse_FlowsStateWhenRedirectUriIsUsed()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1878,6 +1966,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1895,7 +1985,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyAuthorizationResponse_DoesNotOverrideStateSetByApplicationCode()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1917,6 +2007,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{
@ -1939,7 +2031,7 @@ namespace OpenIddict.Server.FunctionalTests
// as validated and a signin grant is applied to return an authorization response.
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1953,6 +2045,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{

207
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Discovery.cs

@ -31,7 +31,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractConfigurationRequest_UnexpectedMethodReturnsAnError(string method)
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.SendAsync(method, "/.well-known/openid-configuration", new OpenIddictRequest());
@ -52,7 +53,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractConfigurationRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -65,6 +66,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -78,7 +81,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractConfigurationRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -96,6 +99,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -107,7 +112,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractConfigurationRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -120,6 +125,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -138,7 +145,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateConfigurationRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -151,6 +158,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -164,7 +173,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateConfigurationRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -182,6 +191,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -193,7 +204,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateConfigurationRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -206,6 +217,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -217,7 +230,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_IssuerIsAutomaticallyInferred()
{
// Arrange
var client = CreateClient();
await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -231,11 +245,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_RegisteredIssuerIsAlwaysPreferred()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.SetIssuer(new Uri("https://www.fabrikam.com/"));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -248,7 +264,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_AbsoluteEndpointsAreCorrectlyExposed()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.SetAuthorizationEndpointUris("https://www.fabrikam.com/path/authorization_endpoint")
.SetCryptographyEndpointUris("https://www.fabrikam.com/path/cryptography_endpoint")
@ -260,6 +276,8 @@ namespace OpenIddict.Server.FunctionalTests
.SetUserinfoEndpointUris("https://www.fabrikam.com/path/userinfo_endpoint");
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -340,7 +358,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_RelativeEndpointsAreCorrectlyComputed(string issuer, string[] endpoints)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.SetIssuer(new Uri(issuer, UriKind.Absolute));
@ -354,6 +372,8 @@ namespace OpenIddict.Server.FunctionalTests
.SetUserinfoEndpointUris(endpoints[7]);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -387,13 +407,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoClientAuthenticationMethodIsIncludedWhenTokenEndpointIsDisabled()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Configure(options => options.GrantTypes.Clear());
options.Configure(options => options.GrantTypes.Add(GrantTypes.Implicit));
options.SetTokenEndpointUris(Array.Empty<Uri>());
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -405,7 +427,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_SupportedClientAuthenticationMethodsAreIncludedWhenTokenEndpointIsEnabled()
{
// Arrange
var client = CreateClient();
await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -420,11 +443,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoClientAuthenticationMethodIsIncludedWhenIntrospectionEndpointIsDisabled()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.SetIntrospectionEndpointUris(Array.Empty<Uri>());
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -436,7 +461,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_SupportedClientAuthenticationMethodsAreIncludedWhenIntrospectionEndpointIsEnabled()
{
// Arrange
var client = CreateClient();
await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -451,11 +477,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoClientAuthenticationMethodIsIncludedWhenRevocationEndpointIsDisabled()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.SetRevocationEndpointUris(Array.Empty<Uri>());
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -467,7 +495,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_SupportedClientAuthenticationMethodsAreIncludedWhenRevocationEndpointIsEnabled()
{
// Arrange
var client = CreateClient();
await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -482,13 +511,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_ConfiguredGrantTypesAreReturned()
{
// Arrange
var client = CreateClient(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
await using var server = await CreateServerAsync(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
{
options.GrantTypes.Clear();
options.GrantTypes.Add(GrantTypes.AuthorizationCode);
options.GrantTypes.Add(GrantTypes.Password);
}));
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
var types = (string[]) response[Metadata.GrantTypesSupported];
@ -503,11 +534,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoSupportedCodeChallengeMethodsPropertyIsReturnedWhenNoMethodIsConfigured()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.PostConfigure<OpenIddictServerOptions>(options => options.CodeChallengeMethods.Clear());
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -519,13 +552,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_ConfiguredCodeChallengeMethodsAreReturned()
{
// Arrange
var client = CreateClient(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
await using var server = await CreateServerAsync(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
{
options.CodeChallengeMethods.Clear();
options.CodeChallengeMethods.Add(CodeChallengeMethods.Sha256);
options.CodeChallengeMethods.Add(CodeChallengeMethods.Plain);
}));
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
var methods = (string[]) response[Metadata.CodeChallengeMethodsSupported];
@ -540,11 +575,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoSupportedResponseModesPropertyIsReturnedWhenNoResponseModeIsConfigured()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.PostConfigure<OpenIddictServerOptions>(options => options.ResponseModes.Clear());
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -556,13 +593,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_ConfiguredResponseModesAreReturned()
{
// Arrange
var client = CreateClient(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
await using var server = await CreateServerAsync(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
{
options.ResponseModes.Clear();
options.ResponseModes.Add(ResponseModes.FormPost);
options.ResponseModes.Add(ResponseModes.Fragment);
}));
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
var modes = (string[]) response[Metadata.ResponseModesSupported];
@ -577,11 +616,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoSupportedResponseTypesPropertyIsReturnedWhenNoResponseTypeIsConfigured()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.PostConfigure<OpenIddictServerOptions>(options => options.ResponseTypes.Clear());
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -593,13 +634,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_ConfiguredResponseTypesAreReturned()
{
// Arrange
var client = CreateClient(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
await using var server = await CreateServerAsync(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
{
options.ResponseTypes.Clear();
options.ResponseTypes.Add(ResponseTypes.Code);
options.ResponseTypes.Add(ResponseTypes.Code + ' ' + ResponseTypes.IdToken);
}));
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
var types = (string[]) response[Metadata.ResponseTypesSupported];
@ -614,11 +657,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoSupportedScopesPropertyIsReturnedWhenNoScopeIsConfigured()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.PostConfigure<OpenIddictServerOptions>(options => options.Scopes.Clear());
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -630,13 +675,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_ConfiguredScopesAreReturned()
{
// Arrange
var client = CreateClient(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
await using var server = await CreateServerAsync(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
{
options.Scopes.Clear();
options.Scopes.Add(Scopes.OpenId);
options.Scopes.Add("custom_scope");
}));
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
var scopes = (string[]) response[Metadata.ScopesSupported];
@ -651,11 +698,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_NoSupportedClaimsPropertyIsReturnedWhenNoClaimIsConfigured()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.PostConfigure<OpenIddictServerOptions>(options => options.Claims.Clear());
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -667,13 +716,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_ConfiguredClaimsAreReturned()
{
// Arrange
var client = CreateClient(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
await using var server = await CreateServerAsync(options => options.Services.PostConfigure<OpenIddictServerOptions>(options =>
{
options.Claims.Clear();
options.Claims.Add(Claims.Profile);
options.Claims.Add("custom_claim");
}));
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
var claims = (string[]) response[Metadata.ClaimsSupported];
@ -688,7 +739,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_SupportedSubjectTypesAreCorrectlyReturned()
{
// Arrange
var client = CreateClient();
await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -712,12 +764,14 @@ namespace OpenIddict.Server.FunctionalTests
// Arrange
var credentials = new SigningCredentials(Mock.Of<AsymmetricSecurityKey>(), algorithm);
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Configure(options => options.SigningCredentials.Clear());
options.AddSigningCredentials(credentials);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
var algorithms = (string[]) response[Metadata.IdTokenSigningAlgValuesSupported];
@ -730,13 +784,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_SymmetricSigningKeysAreIgnored()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Configure(options => options.SigningCredentials.Clear());
options.AddSigningKey(new SymmetricSecurityKey(new byte[256 / 8]));
options.AddSigningCredentials(new SigningCredentials(Mock.Of<AsymmetricSecurityKey>(), Algorithms.RsaSha256));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
var algorithms = (string[]) response[Metadata.IdTokenSigningAlgValuesSupported];
@ -752,7 +808,7 @@ namespace OpenIddict.Server.FunctionalTests
// Arrange
var credentials = new SigningCredentials(Mock.Of<AsymmetricSecurityKey>(), SecurityAlgorithms.RsaSha256Signature);
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Configure(options => options.SigningCredentials.Clear());
options.AddSigningCredentials(credentials);
@ -760,6 +816,8 @@ namespace OpenIddict.Server.FunctionalTests
options.AddSigningCredentials(credentials);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
var algorithms = (string[]) response[Metadata.IdTokenSigningAlgValuesSupported];
@ -772,7 +830,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_SupportedParametersAreReturned()
{
// Arrange
var client = CreateClient();
await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -794,7 +853,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -807,6 +866,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -820,7 +881,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -838,6 +899,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -849,7 +912,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleConfigurationRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -862,6 +925,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -873,7 +938,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyConfigurationResponse_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -891,6 +956,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -902,7 +969,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyConfigurationResponse_ResponseContainsCustomParameters()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -920,6 +987,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/openid-configuration");
@ -937,7 +1006,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractCryptographyRequest_UnexpectedMethodReturnsAnError(string method)
{
// Arrange
var client = CreateClient();
await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act
var response = await client.SendAsync(method, "/.well-known/jwks", new OpenIddictRequest());
@ -958,7 +1028,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractCryptographyRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -971,6 +1041,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
@ -984,7 +1056,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractCryptographyRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1002,6 +1074,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
@ -1013,7 +1087,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractCryptographyRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1026,6 +1100,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
@ -1044,7 +1120,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateCryptographyRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1057,6 +1133,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
@ -1070,7 +1148,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateCryptographyRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1088,6 +1166,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
@ -1099,7 +1179,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateCryptographyRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1112,6 +1192,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
@ -1134,11 +1216,13 @@ namespace OpenIddict.Server.FunctionalTests
var factory = Mock.Of<CryptoProviderFactory>(mock => !mock.IsSupportedAlgorithm(algorithm, It.IsAny<SecurityKey>()));
var key = Mock.Of<SecurityKey>(mock => mock.CryptoProviderFactory == factory);
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.AddSigningCredentials(new SigningCredentials(key, algorithm));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
var keys = (JsonElement) response[Parameters.Keys];
@ -1164,12 +1248,14 @@ namespace OpenIddict.Server.FunctionalTests
Q = Convert.FromBase64String("vQy5C++AzF+TRh6qwbKzOqt87ZHEHidIAh6ivRNewjzIgCWXpseVl7DimY1YdViOnw1VI7xY+EyiyTanq5caTqqB3KcDm2t40bJfrZuUcn/5puRIh1bKNDwIMLsuNCrjHmDlNbocqpYMOh0Pgw7ARNbqrnPjWsYGJPuMNFpax/U=")
};
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Configure(options => options.SigningCredentials.Clear());
options.AddSigningKey(new RsaSecurityKey(parameters));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
var key = response[Parameters.Keys]?[0];
@ -1222,12 +1308,14 @@ namespace OpenIddict.Server.FunctionalTests
var algorithm = ECDsa.Create(parameters);
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Configure(options => options.SigningCredentials.Clear());
options.AddSigningKey(new ECDsaSecurityKey(algorithm));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
var key = response[Parameters.Keys]?[0];
@ -1244,7 +1332,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleCryptographyRequest_X509CertificatesAreCorrectlyExposed()
{
// Arrange
var client = CreateClient();
await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
@ -1266,7 +1355,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleCryptographyRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1279,6 +1368,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
@ -1292,7 +1383,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleCryptographyRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1310,6 +1401,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
@ -1321,7 +1414,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleCryptographyRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1334,6 +1427,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
@ -1345,7 +1440,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyCryptographyResponse_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1363,6 +1458,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");
@ -1374,7 +1471,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyCryptographyResponse_ResponseContainsCustomParameters()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1392,6 +1489,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/.well-known/jwks");

290
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Exchange.cs

File diff suppressed because it is too large

150
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Introspection.cs

@ -34,7 +34,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractIntrospectionRequest_UnexpectedMethodReturnsAnError(string method)
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.SendAsync(method, "/connect/introspect", new OpenIddictRequest());
@ -55,7 +56,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractIntrospectionRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -68,6 +69,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest());
@ -81,7 +84,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractIntrospectionRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -99,6 +102,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/connect/introspect");
@ -110,7 +115,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractIntrospectionRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -123,6 +128,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/connect/introspect");
@ -134,7 +141,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_MissingTokenCausesAnError()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
@ -151,13 +159,15 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_InvalidTokenCausesAnError()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -173,7 +183,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_ExpiredTokenCausesAnError()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -196,6 +206,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -212,7 +224,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_AuthorizationCodeCausesAnErrorWhenPresentersAreMissing()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -233,6 +245,8 @@ namespace OpenIddict.Server.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act and assert
var exception = await Assert.ThrowsAsync<InvalidOperationException>(delegate
{
@ -251,7 +265,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_AuthorizationCodeCausesAnErrorWhenCallerIsNotAValidPresenter()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -274,6 +288,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -291,7 +307,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_AccessTokenCausesAnErrorWhenCallerIsNotAValidAudienceOrPresenter()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -315,6 +331,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -332,7 +350,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_IdentityTokenCausesAnErrorWhenCallerIsNotAValidAudience()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -355,6 +373,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -372,7 +392,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_RefreshTokenCausesAnErrorWhenCallerIsNotAValidPresenter()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -395,6 +415,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -412,11 +434,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_RequestWithoutClientIdIsRejectedWhenClientIdentificationIsRequired()
{
// Arrange
var client = CreateClient(builder =>
await using var server = await CreateServerAsync(builder =>
{
builder.Configure(options => options.AcceptAnonymousClients = false);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -438,11 +462,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(value: null);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -477,13 +503,15 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
options.Configure(options => options.IgnoreEndpointPermissions = false);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -515,11 +543,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true);
});
var client = CreateClient(builder =>
await using var server = await CreateServerAsync(builder =>
{
builder.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -551,11 +581,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(builder =>
await using var server = await CreateServerAsync(builder =>
{
builder.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -590,11 +622,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -621,7 +655,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -649,6 +683,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -665,7 +701,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -698,6 +734,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -712,7 +750,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateIntrospectionRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -740,6 +778,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -754,7 +794,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleIntrospectionRequest_BasicClaimsAreCorrectlyReturned()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -782,6 +822,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(ValidateExpirationDate.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -808,7 +850,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleIntrospectionRequest_NonBasicAuthorizationCodeClaimsAreNotReturned()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -831,6 +873,8 @@ namespace OpenIddict.Server.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -849,7 +893,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleIntrospectionRequest_NonBasicRefreshTokenClaimsAreNotReturned()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -872,6 +916,8 @@ namespace OpenIddict.Server.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -904,7 +950,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{
@ -929,6 +975,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -962,7 +1010,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{
@ -985,6 +1033,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -1017,7 +1067,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{
@ -1044,6 +1094,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -1082,7 +1134,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{
@ -1116,6 +1168,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -1161,7 +1215,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(value: null);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.UseReferenceTokens();
@ -1184,6 +1238,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -1209,7 +1265,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(new OpenIddictAuthorization());
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{
@ -1276,6 +1332,8 @@ namespace OpenIddict.Server.FunctionalTests
options.UseReferenceTokens();
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -1300,7 +1358,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(value: null);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{
@ -1368,6 +1426,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -1398,7 +1458,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{
@ -1466,6 +1526,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -1509,7 +1571,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{
@ -1551,6 +1613,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -1578,7 +1642,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleIntrospectionRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1606,6 +1670,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -1622,7 +1688,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleIntrospectionRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1655,6 +1721,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -1669,7 +1737,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleIntrospectionRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1697,6 +1765,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -1711,7 +1781,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyIntrospectionResponse_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1744,6 +1814,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{
@ -1758,7 +1830,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyIntrospectionResponse_ResponseContainsCustomParameters()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1776,6 +1848,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{

102
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Revocation.cs

@ -31,7 +31,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractRevocationRequest_UnexpectedMethodReturnsAnError(string method)
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.SendAsync(method, "/connect/revoke", new OpenIddictRequest());
@ -52,7 +53,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractRevocationRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -65,6 +66,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest());
@ -78,7 +81,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractRevocationRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -96,6 +99,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest());
@ -107,7 +112,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractRevocationRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -120,6 +125,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest());
@ -131,7 +138,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_MissingTokenCausesAnError()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
@ -148,7 +156,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_IdentityTokenCausesAnUnsupportedTokenTypeError()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -171,6 +179,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -188,7 +198,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_AuthorizationCodeCausesAnErrorWhenCallerIsNotAValidPresenter()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -211,6 +221,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -228,7 +240,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_AccessTokenCausesAnErrorWhenCallerIsNotAValidAudienceOrPresenter()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -252,6 +264,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -269,7 +283,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_RefreshTokenCausesAnErrorWhenCallerIsNotAValidPresenter()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -292,6 +306,8 @@ namespace OpenIddict.Server.FunctionalTests
options.RemoveEventHandler(NormalizeErrorResponse.Descriptor);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -309,11 +325,13 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_RequestWithoutClientIdIsRejectedWhenClientIdentificationIsRequired()
{
// Arrange
var client = CreateClient(builder =>
await using var server = await CreateServerAsync(builder =>
{
builder.Configure(options => options.AcceptAnonymousClients = false);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -336,11 +354,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(value: null);
});
var client = CreateClient(builder =>
await using var server = await CreateServerAsync(builder =>
{
builder.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -375,13 +395,15 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(builder =>
await using var server = await CreateServerAsync(builder =>
{
builder.Services.AddSingleton(manager);
builder.Configure(options => options.IgnoreEndpointPermissions = false);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -414,11 +436,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true);
});
var client = CreateClient(builder =>
await using var server = await CreateServerAsync(builder =>
{
builder.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -451,11 +475,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(builder =>
await using var server = await CreateServerAsync(builder =>
{
builder.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -491,11 +517,13 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(builder =>
await using var server = await CreateServerAsync(builder =>
{
builder.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -525,7 +553,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -553,6 +581,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -569,7 +599,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -602,6 +632,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -616,7 +648,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateRevocationRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -644,6 +676,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -664,7 +698,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(value: null);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{
@ -687,6 +721,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -722,7 +758,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(TokenTypeHints.RefreshToken);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{
@ -745,6 +781,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -783,7 +821,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(true);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.AddEventHandler<ProcessAuthenticationContext>(builder =>
{
@ -806,6 +844,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -830,7 +870,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleRevocationRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -858,6 +898,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -874,7 +916,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleRevocationRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -907,6 +949,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -921,7 +965,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleRevocationRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -949,6 +993,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -963,7 +1009,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyRevocationResponse_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -996,6 +1042,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{
@ -1010,7 +1058,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyRevocationResponse_ResponseContainsCustomParameters()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -1028,6 +1076,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{

74
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Session.cs

@ -28,7 +28,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractLogoutRequest_UnexpectedMethodReturnsAnError(string method)
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.SendAsync(method, "/connect/logout", new OpenIddictRequest());
@ -49,7 +50,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractLogoutRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -62,6 +63,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -75,7 +78,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractLogoutRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -93,6 +96,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/connect/logout");
@ -104,7 +109,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractLogoutRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -117,6 +122,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/connect/logout");
@ -132,7 +139,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateLogoutRequest_RequestIsRejectedWhenRedirectUriIsInvalid(string address, string message)
{
// Arrange
var client = CreateClient();
await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
@ -155,11 +163,13 @@ namespace OpenIddict.Server.FunctionalTests
.Returns(AsyncEnumerable.Empty<OpenIddictApplication>());
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
{
@ -195,13 +205,15 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
options.Configure(options => options.IgnoreEndpointPermissions = false);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
{
@ -243,7 +255,7 @@ namespace OpenIddict.Server.FunctionalTests
.ReturnsAsync(false);
});
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddSingleton(manager);
@ -251,6 +263,8 @@ namespace OpenIddict.Server.FunctionalTests
options.Configure(options => options.IgnoreEndpointPermissions = false);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/signout", new OpenIddictRequest
{
@ -278,7 +292,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateLogoutRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -291,6 +305,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -304,7 +320,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateLogoutRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -322,6 +338,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -333,7 +351,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateLogoutRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -346,6 +364,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -364,7 +384,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleLogoutRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -377,6 +397,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -390,7 +412,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleLogoutRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -408,6 +430,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -419,7 +443,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleLogoutRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -432,6 +456,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -443,7 +469,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyLogoutResponse_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -461,6 +487,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest());
@ -472,7 +500,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyLogoutResponse_ResponseContainsCustomParameters()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -490,6 +518,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
{
@ -505,12 +535,14 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyLogoutResponse_DoesNotSetStateWhenUserIsNotRedirected()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
options.SetLogoutEndpointUris("/signout");
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/signout", new OpenIddictRequest
{
@ -525,12 +557,14 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyLogoutResponse_FlowsStateWhenRedirectUriIsUsed()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
options.SetLogoutEndpointUris("/signout");
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/signout", new OpenIddictRequest
{
@ -546,7 +580,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyLogoutResponse_DoesNotOverrideStateSetByApplicationCode()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
options.SetLogoutEndpointUris("/signout");
@ -560,6 +594,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/signout", new OpenIddictRequest
{

77
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.Userinfo.cs

@ -28,7 +28,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractUserinfoRequest_UnexpectedMethodReturnsAnError(string method)
{
// Arrange
var client = CreateClient();
await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act
var response = await client.SendAsync(method, "/connect/userinfo", new OpenIddictRequest());
@ -49,7 +50,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractUserinfoRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -62,6 +63,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest());
@ -75,7 +78,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractUserinfoRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -93,6 +96,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/connect/userinfo");
@ -104,7 +109,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ExtractUserinfoRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -117,6 +122,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.GetAsync("/connect/userinfo");
@ -128,7 +135,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateUserinfoRequest_MissingTokenCausesAnError()
{
// Arrange
var client = CreateClient();
await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
@ -144,7 +152,8 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateUserinfoRequest_InvalidTokenCausesAnError()
{
// Arrange
var client = CreateClient();
await using var server = await CreateServerAsync();
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
@ -161,7 +170,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateUserinfoRequest_ExpiredTokenCausesAnError()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -182,6 +191,8 @@ namespace OpenIddict.Server.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{
@ -204,7 +215,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateUserinfoRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -232,6 +243,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{
@ -248,7 +261,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateUserinfoRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -281,6 +294,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{
@ -295,7 +310,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ValidateUserinfoRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -323,6 +338,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{
@ -337,7 +354,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_BasicClaimsAreCorrectlyReturned()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -359,6 +376,8 @@ namespace OpenIddict.Server.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{
@ -376,7 +395,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_NonBasicClaimsAreNotReturnedWhenNoScopeWasGranted()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -406,6 +425,8 @@ namespace OpenIddict.Server.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{
@ -423,7 +444,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_ProfileClaimsAreCorrectlyReturned()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -452,6 +473,8 @@ namespace OpenIddict.Server.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{
@ -468,7 +491,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_EmailClaimIsCorrectlyReturned()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -492,6 +515,8 @@ namespace OpenIddict.Server.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{
@ -506,7 +531,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_PhoneClaimIsCorrectlyReturned()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -530,6 +555,8 @@ namespace OpenIddict.Server.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{
@ -551,7 +578,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_AllowsRejectingRequest(string error, string description, string uri)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -579,6 +606,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{
@ -595,7 +624,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -628,6 +657,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{
@ -642,7 +673,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task HandleUserinfoRequest_AllowsSkippingHandler()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -670,6 +701,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{
@ -684,7 +717,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyUserinfoResponse_AllowsHandlingResponse()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -717,6 +750,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{
@ -731,7 +766,7 @@ namespace OpenIddict.Server.FunctionalTests
public async Task ApplyUserinfoResponse_ResponseContainsCustomParameters()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -764,6 +799,8 @@ namespace OpenIddict.Server.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/userinfo", new OpenIddictRequest
{

350
test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTests.cs

File diff suppressed because it is too large

38
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTestServer.cs

@ -0,0 +1,38 @@
/*
* Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
* See https://github.com/openiddict/openiddict-core for more information concerning
* the license and the contributors participating to this project.
*/
using System.Threading.Tasks;
using Microsoft.Owin.Testing;
using OpenIddict.Server.FunctionalTests;
namespace OpenIddict.Server.Owin.FunctionalTests
{
/// <summary>
/// Represents a test host used by the server integration tests.
/// </summary>
public class OpenIddictServerOwinIntegrationTestServer : OpenIddictServerIntegrationTestServer
{
public OpenIddictServerOwinIntegrationTestServer(TestServer server)
=> Server = server;
/// <summary>
/// Gets the ASP.NET Core test server used by this instance.
/// </summary>
public TestServer Server { get; }
public override ValueTask<OpenIddictServerIntegrationTestClient> CreateClientAsync()
=> new ValueTask<OpenIddictServerIntegrationTestClient>(
new OpenIddictServerIntegrationTestClient(Server.HttpClient));
public override ValueTask DisposeAsync()
{
// Dispose of the underlying test server.
Server.Dispose();
return default;
}
}
}

7
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Authentication.cs

@ -19,7 +19,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractAuthorizationRequest_RequestIdParameterIsRejectedWhenRequestCachingIsDisabled()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
@ -36,7 +37,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractAuthorizationRequest_InvalidRequestIdParameterIsRejected()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddDistributedMemoryCache();
@ -44,6 +45,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
.EnableAuthorizationEndpointCaching();
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/authorize", new OpenIddictRequest
{

4
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Exchange.cs

@ -20,7 +20,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractTokenRequest_MultipleClientCredentialsCauseAnError()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -38,6 +38,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/token", new OpenIddictRequest
{

4
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Introspection.cs

@ -20,7 +20,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractIntrospectionRequest_MultipleClientCredentialsCauseAnError()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -38,6 +38,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/introspect", new OpenIddictRequest
{

4
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Revocation.cs

@ -20,7 +20,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractRevocationRequest_MultipleClientCredentialsCauseAnError()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -38,6 +38,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/revoke", new OpenIddictRequest
{

7
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.Session.cs

@ -19,7 +19,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractLogoutRequest_RequestIdParameterIsRejectedWhenRequestCachingIsDisabled()
{
// Arrange
var client = CreateClient(options => options.EnableDegradedMode());
await using var server = await CreateServerAsync(options => options.EnableDegradedMode());
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
@ -36,7 +37,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ExtractLogoutRequest_InvalidRequestIdParameterIsRejected()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.Services.AddDistributedMemoryCache();
@ -44,6 +45,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
.EnableLogoutEndpointCaching();
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/connect/logout", new OpenIddictRequest
{

37
test/OpenIddict.Server.Owin.IntegrationTests/OpenIddictServerOwinIntegrationTests.cs

@ -30,7 +30,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ProcessChallenge_ReturnsErrorFromAuthenticationProperties()
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
options.SetTokenEndpointUris("/challenge/custom");
@ -44,6 +44,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync("/challenge/custom", new OpenIddictRequest
{
@ -128,10 +130,10 @@ namespace OpenIddict.Server.Owin.FunctionalTests
[InlineData("/.WELL-KNOWN/JWKS/SUBPATH", OpenIddictServerEndpointType.Unknown)]
[InlineData("/.well-known/jwks/subpath/", OpenIddictServerEndpointType.Unknown)]
[InlineData("/.WELL-KNOWN/JWKS/SUBPATH/", OpenIddictServerEndpointType.Unknown)]
public Task ProcessRequest_MatchesCorrespondingEndpoint(string path, OpenIddictServerEndpointType type)
public async Task ProcessRequest_MatchesCorrespondingEndpoint(string path, OpenIddictServerEndpointType type)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -145,8 +147,10 @@ namespace OpenIddict.Server.Owin.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
return client.PostAsync(path, new OpenIddictRequest());
await client.PostAsync(path, new OpenIddictRequest());
}
[Theory]
@ -159,10 +163,10 @@ namespace OpenIddict.Server.Owin.FunctionalTests
[InlineData("/custom/connect/userinfo", OpenIddictServerEndpointType.Userinfo)]
[InlineData("/custom/.well-known/openid-configuration", OpenIddictServerEndpointType.Configuration)]
[InlineData("/custom/.well-known/jwks", OpenIddictServerEndpointType.Cryptography)]
public Task ProcessRequest_AllowsOverridingEndpoint(string address, OpenIddictServerEndpointType type)
public async Task ProcessRequest_AllowsOverridingEndpoint(string address, OpenIddictServerEndpointType type)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -183,8 +187,10 @@ namespace OpenIddict.Server.Owin.FunctionalTests
});
});
await using var client = await server.CreateClientAsync();
// Act
return client.PostAsync(address, new OpenIddictRequest());
await client.PostAsync(address, new OpenIddictRequest());
}
[Theory]
@ -199,7 +205,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ProcessRequest_RejectsInsecureHttpRequests(string address)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -207,6 +213,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
.Configure(options => options.DisableTransportSecurityRequirement = false);
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync(address, new OpenIddictRequest());
@ -228,7 +236,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ProcessRequest_AllowsHandlingResponse(string address)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -246,6 +254,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync(address, new OpenIddictRequest());
@ -266,7 +276,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
public async Task ProcessRequest_AllowsSkippingHandler(string address)
{
// Arrange
var client = CreateClient(options =>
await using var server = await CreateServerAsync(options =>
{
options.EnableDegradedMode();
@ -279,6 +289,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
}));
});
await using var client = await server.CreateClientAsync();
// Act
var response = await client.PostAsync(address, new OpenIddictRequest());
@ -286,7 +298,7 @@ namespace OpenIddict.Server.Owin.FunctionalTests
Assert.Equal("Bob le Magnifique", (string) response["name"]);
}
protected override OpenIddictServerIntegrationTestClient CreateClient(Action<OpenIddictServerBuilder> configuration = null)
protected override ValueTask<OpenIddictServerIntegrationTestServer> CreateServerAsync(Action<OpenIddictServerBuilder> configuration = null)
{
var services = new ServiceCollection();
ConfigureServices(services);
@ -402,7 +414,8 @@ namespace OpenIddict.Server.Owin.FunctionalTests
});
});
return new OpenIddictServerIntegrationTestClient(server.HttpClient);
return new ValueTask<OpenIddictServerIntegrationTestServer>(
new OpenIddictServerOwinIntegrationTestServer(server));
}
}
}

Loading…
Cancel
Save