diff --git a/src/OpenIddict.EntityFramework/Resolvers/OpenIddictApplicationStoreResolver.cs b/src/OpenIddict.EntityFramework/Resolvers/OpenIddictApplicationStoreResolver.cs index f9f001f5..33600720 100644 --- a/src/OpenIddict.EntityFramework/Resolvers/OpenIddictApplicationStoreResolver.cs +++ b/src/OpenIddict.EntityFramework/Resolvers/OpenIddictApplicationStoreResolver.cs @@ -66,7 +66,7 @@ namespace OpenIddict.EntityFramework throw new InvalidOperationException(new StringBuilder() .AppendLine("No Entity Framework 6.x context was specified in the OpenIddict options.") .Append("To configure the OpenIddict Entity Framework 6.x stores to use a specific 'DbContext', ") - .Append("use 'options.AddEntityFrameworkStores().UseContext()'.") + .Append("use 'options.UseEntityFramework().UseDbContext()'.") .ToString()); } diff --git a/src/OpenIddict.EntityFramework/Resolvers/OpenIddictAuthorizationStoreResolver.cs b/src/OpenIddict.EntityFramework/Resolvers/OpenIddictAuthorizationStoreResolver.cs index 996fa8e6..85cee741 100644 --- a/src/OpenIddict.EntityFramework/Resolvers/OpenIddictAuthorizationStoreResolver.cs +++ b/src/OpenIddict.EntityFramework/Resolvers/OpenIddictAuthorizationStoreResolver.cs @@ -66,7 +66,7 @@ namespace OpenIddict.EntityFramework throw new InvalidOperationException(new StringBuilder() .AppendLine("No Entity Framework 6.x context was specified in the OpenIddict options.") .Append("To configure the OpenIddict Entity Framework 6.x stores to use a specific 'DbContext', ") - .Append("use 'options.AddEntityFrameworkStores().UseContext()'.") + .Append("use 'options.UseEntityFramework().UseDbContext()'.") .ToString()); } diff --git a/src/OpenIddict.EntityFramework/Resolvers/OpenIddictScopeStoreResolver.cs b/src/OpenIddict.EntityFramework/Resolvers/OpenIddictScopeStoreResolver.cs index b65906e9..6f88ab41 100644 --- a/src/OpenIddict.EntityFramework/Resolvers/OpenIddictScopeStoreResolver.cs +++ b/src/OpenIddict.EntityFramework/Resolvers/OpenIddictScopeStoreResolver.cs @@ -66,7 +66,7 @@ namespace OpenIddict.EntityFramework throw new InvalidOperationException(new StringBuilder() .AppendLine("No Entity Framework 6.x context was specified in the OpenIddict options.") .Append("To configure the OpenIddict Entity Framework 6.x stores to use a specific 'DbContext', ") - .Append("use 'options.AddEntityFrameworkStores().UseContext()'.") + .Append("use 'options.UseEntityFramework().UseDbContext()'.") .ToString()); } diff --git a/src/OpenIddict.EntityFramework/Resolvers/OpenIddictTokenStoreResolver.cs b/src/OpenIddict.EntityFramework/Resolvers/OpenIddictTokenStoreResolver.cs index 5aa89a85..46ecf33b 100644 --- a/src/OpenIddict.EntityFramework/Resolvers/OpenIddictTokenStoreResolver.cs +++ b/src/OpenIddict.EntityFramework/Resolvers/OpenIddictTokenStoreResolver.cs @@ -66,7 +66,7 @@ namespace OpenIddict.EntityFramework throw new InvalidOperationException(new StringBuilder() .AppendLine("No Entity Framework 6.x context was specified in the OpenIddict options.") .Append("To configure the OpenIddict Entity Framework 6.x stores to use a specific 'DbContext', ") - .Append("use 'options.AddEntityFrameworkStores().UseContext()'.") + .Append("use 'options.UseEntityFramework().UseDbContext()'.") .ToString()); } diff --git a/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictApplicationStoreResolver.cs b/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictApplicationStoreResolver.cs index c5b25873..f65ee32f 100644 --- a/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictApplicationStoreResolver.cs +++ b/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictApplicationStoreResolver.cs @@ -66,7 +66,7 @@ namespace OpenIddict.EntityFrameworkCore throw new InvalidOperationException(new StringBuilder() .AppendLine("No Entity Framework Core context was specified in the OpenIddict options.") .Append("To configure the OpenIddict Entity Framework Core stores to use a specific 'DbContext', ") - .Append("use 'options.AddEntityFrameworkCoreStores().UseContext()'.") + .Append("use 'options.UseEntityFrameworkCore().UseDbContext()'.") .ToString()); } diff --git a/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictAuthorizationStoreResolver.cs b/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictAuthorizationStoreResolver.cs index 4951e1ac..d0a72a8e 100644 --- a/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictAuthorizationStoreResolver.cs +++ b/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictAuthorizationStoreResolver.cs @@ -67,7 +67,7 @@ namespace OpenIddict.EntityFrameworkCore throw new InvalidOperationException(new StringBuilder() .AppendLine("No Entity Framework Core context was specified in the OpenIddict options.") .Append("To configure the OpenIddict Entity Framework Core stores to use a specific 'DbContext', ") - .Append("use 'options.AddEntityFrameworkCoreStores().UseContext()'.") + .Append("use 'options.UseEntityFrameworkCore().UseDbContext()'.") .ToString()); } diff --git a/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictScopeStoreResolver.cs b/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictScopeStoreResolver.cs index 69187b6a..9d1ae861 100644 --- a/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictScopeStoreResolver.cs +++ b/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictScopeStoreResolver.cs @@ -66,7 +66,7 @@ namespace OpenIddict.EntityFrameworkCore throw new InvalidOperationException(new StringBuilder() .AppendLine("No Entity Framework Core context was specified in the OpenIddict options.") .Append("To configure the OpenIddict Entity Framework Core stores to use a specific 'DbContext', ") - .Append("use 'options.AddEntityFrameworkCoreStores().UseContext()'.") + .Append("use 'options.UseEntityFrameworkCore().UseDbContext()'.") .ToString()); } diff --git a/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictTokenStoreResolver.cs b/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictTokenStoreResolver.cs index f40da083..271bef95 100644 --- a/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictTokenStoreResolver.cs +++ b/src/OpenIddict.EntityFrameworkCore/Resolvers/OpenIddictTokenStoreResolver.cs @@ -66,7 +66,7 @@ namespace OpenIddict.EntityFrameworkCore throw new InvalidOperationException(new StringBuilder() .AppendLine("No Entity Framework Core context was specified in the OpenIddict options.") .Append("To configure the OpenIddict Entity Framework Core stores to use a specific 'DbContext', ") - .Append("use 'options.AddEntityFrameworkCoreStores().UseContext()'.") + .Append("use 'options.UseEntityFrameworkCore().UseDbContext()'.") .ToString()); } diff --git a/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Authentication.cs b/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Authentication.cs index 0206fb82..564dc761 100644 --- a/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Authentication.cs +++ b/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Authentication.cs @@ -32,7 +32,7 @@ namespace OpenIddict.Server { var options = (OpenIddictServerOptions) context.Options; - var logger = context.HttpContext.RequestServices.GetRequiredService>(); + var logger = GetLogger(context.HttpContext.RequestServices); // Reject requests using the unsupported request parameter. if (!string.IsNullOrEmpty(context.Request.Request)) @@ -117,9 +117,9 @@ namespace OpenIddict.Server { var options = (OpenIddictServerOptions) context.Options; - var logger = context.HttpContext.RequestServices.GetRequiredService>(); - var applicationManager = context.HttpContext.RequestServices.GetRequiredService(); - var scopeManager = context.HttpContext.RequestServices.GetRequiredService(); + var logger = GetLogger(context.HttpContext.RequestServices); + var applicationManager = GetApplicationManager(context.HttpContext.RequestServices); + var scopeManager = GetScopeManager(context.HttpContext.RequestServices); // Note: the OpenID Connect server middleware supports authorization code, implicit, hybrid, // none and custom flows but OpenIddict uses a stricter policy rejecting none and custum flows. diff --git a/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Exchange.cs b/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Exchange.cs index 5eacb2a3..85c181e4 100644 --- a/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Exchange.cs +++ b/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Exchange.cs @@ -25,9 +25,9 @@ namespace OpenIddict.Server { var options = (OpenIddictServerOptions) context.Options; - var logger = context.HttpContext.RequestServices.GetRequiredService>(); - var applicationManager = context.HttpContext.RequestServices.GetRequiredService(); - var scopeManager = context.HttpContext.RequestServices.GetRequiredService(); + var logger = GetLogger(context.HttpContext.RequestServices); + var applicationManager = GetApplicationManager(context.HttpContext.RequestServices); + var scopeManager = GetScopeManager(context.HttpContext.RequestServices); // Reject token requests that don't specify a supported grant type. if (!options.GrantTypes.Contains(context.Request.GrantType)) @@ -294,8 +294,8 @@ namespace OpenIddict.Server { var options = (OpenIddictServerOptions) context.Options; - var logger = context.HttpContext.RequestServices.GetRequiredService>(); - var tokenManager = context.HttpContext.RequestServices.GetRequiredService(); + var logger = GetLogger(context.HttpContext.RequestServices); + var tokenManager = GetTokenManager(context.HttpContext.RequestServices); if (context.Ticket != null) { diff --git a/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Helpers.cs b/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Helpers.cs index 446dd79e..e5458fe0 100644 --- a/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Helpers.cs +++ b/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Helpers.cs @@ -8,6 +8,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; +using System.Text; using System.Threading.Tasks; using AspNet.Security.OpenIdConnect.Extensions; using AspNet.Security.OpenIdConnect.Primitives; @@ -30,9 +31,9 @@ namespace OpenIddict.Server [NotNull] AuthenticationTicket ticket, [NotNull] OpenIddictServerOptions options, [NotNull] HttpContext context, [NotNull] OpenIdConnectRequest request) { - var logger = context.RequestServices.GetRequiredService>(); - var applicationManager = context.RequestServices.GetRequiredService(); - var authorizationManager = context.RequestServices.GetRequiredService(); + var logger = GetLogger(context.RequestServices); + var applicationManager = GetApplicationManager(context.RequestServices); + var authorizationManager = GetAuthorizationManager(context.RequestServices); var descriptor = new OpenIddictAuthorizationDescriptor { @@ -99,9 +100,9 @@ namespace OpenIddict.Server type == OpenIdConnectConstants.TokenUsages.RefreshToken, "Only authorization codes, access and refresh tokens should be created using this method."); - var logger = context.RequestServices.GetRequiredService>(); - var applicationManager = context.RequestServices.GetRequiredService(); - var tokenManager = context.RequestServices.GetRequiredService(); + var logger = GetLogger(context.RequestServices); + var applicationManager = GetApplicationManager(context.RequestServices); + var tokenManager = GetTokenManager(context.RequestServices); // When sliding expiration is disabled, the expiration date of generated refresh tokens is fixed // and must exactly match the expiration date of the refresh token used in the token request. @@ -228,8 +229,8 @@ namespace OpenIddict.Server [NotNull] OpenIdConnectRequest request, [NotNull] ISecureDataFormat format) { - var logger = context.RequestServices.GetRequiredService>(); - var tokenManager = context.RequestServices.GetRequiredService(); + var logger = GetLogger(context.RequestServices); + var tokenManager = GetTokenManager(context.RequestServices); Debug.Assert(type == OpenIdConnectConstants.TokenUsages.AccessToken || type == OpenIdConnectConstants.TokenUsages.AuthorizationCode || @@ -377,8 +378,8 @@ namespace OpenIddict.Server private async Task TryRevokeAuthorizationAsync([NotNull] AuthenticationTicket ticket, [NotNull] HttpContext context) { - var logger = context.RequestServices.GetRequiredService>(); - var authorizationManager = context.RequestServices.GetRequiredService(); + var logger = GetLogger(context.RequestServices); + var authorizationManager = GetAuthorizationManager(context.RequestServices); // Note: if the authorization identifier or the authorization itself // cannot be found, return true as the authorization doesn't need @@ -425,8 +426,8 @@ namespace OpenIddict.Server private async Task TryRevokeTokenAsync([NotNull] object token, [NotNull] HttpContext context) { - var logger = context.RequestServices.GetRequiredService>(); - var tokenManager = context.RequestServices.GetRequiredService(); + var logger = GetLogger(context.RequestServices); + var tokenManager = GetTokenManager(context.RequestServices); var identifier = await tokenManager.GetIdAsync(token); Debug.Assert(!string.IsNullOrEmpty(identifier), "The token identifier shouldn't be null or empty."); @@ -459,7 +460,7 @@ namespace OpenIddict.Server private async Task TryRevokeTokensAsync([NotNull] AuthenticationTicket ticket, [NotNull] HttpContext context) { - var tokenManager = context.RequestServices.GetRequiredService(); + var tokenManager = GetTokenManager(context.RequestServices); // Note: if the authorization identifier is null, return true as no tokens need to be revoked. var identifier = ticket.GetProperty(OpenIddictConstants.Properties.AuthorizationId); @@ -486,8 +487,8 @@ namespace OpenIddict.Server private async Task TryRedeemTokenAsync([NotNull] object token, [NotNull] HttpContext context) { - var logger = context.RequestServices.GetRequiredService>(); - var tokenManager = context.RequestServices.GetRequiredService(); + var logger = GetLogger(context.RequestServices); + var tokenManager = GetTokenManager(context.RequestServices); var identifier = await tokenManager.GetIdAsync(token); Debug.Assert(!string.IsNullOrEmpty(identifier), "The token identifier shouldn't be null or empty."); @@ -522,8 +523,8 @@ namespace OpenIddict.Server [NotNull] object token, [NotNull] AuthenticationTicket ticket, [NotNull] HttpContext context, [NotNull] OpenIddictServerOptions options) { - var logger = context.RequestServices.GetRequiredService>(); - var tokenManager = context.RequestServices.GetRequiredService(); + var logger = GetLogger(context.RequestServices); + var tokenManager = GetTokenManager(context.RequestServices); var identifier = ticket.GetTokenId(); Debug.Assert(!string.IsNullOrEmpty(identifier), "The token identifier shouldn't be null or empty."); @@ -565,7 +566,7 @@ namespace OpenIddict.Server [NotNull] HttpContext context, [NotNull] OpenIdConnectRequest request, [NotNull] AuthenticationProperties properties) { - var logger = context.RequestServices.GetRequiredService>(); + var logger = GetLogger(context.RequestServices); Debug.Assert(properties != null, "The authentication properties shouldn't be null."); @@ -677,5 +678,32 @@ namespace OpenIddict.Server continue; } } + + private static ILogger GetLogger(IServiceProvider provider) => provider.GetRequiredService>(); + + private static IOpenIddictApplicationManager GetApplicationManager(IServiceProvider provider) + => provider.GetService() ?? throw new InvalidOperationException(new StringBuilder() + .AppendLine("The core services must be registered when enabling the server handler.") + .Append("To register the OpenIddict core services, use 'services.AddOpenIddict().AddCore()'.") + .ToString()); + + private static IOpenIddictAuthorizationManager GetAuthorizationManager(IServiceProvider provider) + => provider.GetService() ?? throw new InvalidOperationException(new StringBuilder() + .AppendLine("The core services must be registered when enabling the server handler.") + .Append("To register the OpenIddict core services, use 'services.AddOpenIddict().AddCore()'.") + .ToString()); + + private static IOpenIddictScopeManager GetScopeManager(IServiceProvider provider) + => provider.GetService() ?? throw new InvalidOperationException(new StringBuilder() + .AppendLine("The core services must be registered when enabling the server handler.") + .Append("To register the OpenIddict core services, use 'services.AddOpenIddict().AddCore()'.") + .ToString()); + + private static IOpenIddictTokenManager GetTokenManager(IServiceProvider provider) + => provider.GetService() ?? throw new InvalidOperationException(new StringBuilder() + .AppendLine("The core services must be registered when enabling the server handler.") + .Append("To register the OpenIddict core services, use 'services.AddOpenIddict().AddCore()'.") + .ToString()); + } } \ No newline at end of file diff --git a/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Introspection.cs b/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Introspection.cs index 9a2352a9..77c90b4e 100644 --- a/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Introspection.cs +++ b/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Introspection.cs @@ -20,8 +20,8 @@ namespace OpenIddict.Server { public override async Task ValidateIntrospectionRequest([NotNull] ValidateIntrospectionRequestContext context) { - var logger = context.HttpContext.RequestServices.GetRequiredService>(); - var applicationManager = context.HttpContext.RequestServices.GetRequiredService(); + var logger = GetLogger(context.HttpContext.RequestServices); + var applicationManager = GetApplicationManager(context.HttpContext.RequestServices); // Note: the OpenID Connect server middleware supports unauthenticated introspection requests // but OpenIddict uses a stricter policy preventing unauthenticated/public applications @@ -102,8 +102,8 @@ namespace OpenIddict.Server { var options = (OpenIddictServerOptions) context.Options; - var logger = context.HttpContext.RequestServices.GetRequiredService>(); - var tokenManager = context.HttpContext.RequestServices.GetRequiredService(); + var logger = GetLogger(context.HttpContext.RequestServices); + var tokenManager = GetTokenManager(context.HttpContext.RequestServices); Debug.Assert(context.Ticket != null, "The authentication ticket shouldn't be null."); Debug.Assert(!string.IsNullOrEmpty(context.Request.ClientId), "The client_id parameter shouldn't be null."); diff --git a/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Revocation.cs b/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Revocation.cs index aacf336b..ecbd6bcd 100644 --- a/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Revocation.cs +++ b/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Revocation.cs @@ -23,8 +23,8 @@ namespace OpenIddict.Server { var options = (OpenIddictServerOptions) context.Options; - var logger = context.HttpContext.RequestServices.GetRequiredService>(); - var applicationManager = context.HttpContext.RequestServices.GetRequiredService(); + var logger = GetLogger(context.HttpContext.RequestServices); + var applicationManager = GetApplicationManager(context.HttpContext.RequestServices); Debug.Assert(!options.DisableTokenRevocation, "Token revocation support shouldn't be disabled at this stage."); @@ -170,8 +170,8 @@ namespace OpenIddict.Server { var options = (OpenIddictServerOptions) context.Options; - var logger = context.HttpContext.RequestServices.GetRequiredService>(); - var tokenManager = context.HttpContext.RequestServices.GetRequiredService(); + var logger = GetLogger(context.HttpContext.RequestServices); + var tokenManager = GetTokenManager(context.HttpContext.RequestServices); Debug.Assert(context.Ticket != null, "The authentication ticket shouldn't be null."); diff --git a/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Session.cs b/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Session.cs index 4225aad8..ee428af1 100644 --- a/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Session.cs +++ b/src/OpenIddict.Server/Internal/OpenIddictServerProvider.Session.cs @@ -29,7 +29,7 @@ namespace OpenIddict.Server { var options = (OpenIddictServerOptions) context.Options; - var logger = context.HttpContext.RequestServices.GetRequiredService>(); + var logger = GetLogger(context.HttpContext.RequestServices); // If a request_id parameter can be found in the logout request, // restore the complete logout request from the distributed cache. @@ -86,8 +86,8 @@ namespace OpenIddict.Server public override async Task ValidateLogoutRequest([NotNull] ValidateLogoutRequestContext context) { - var logger = context.HttpContext.RequestServices.GetRequiredService>(); - var applicationManager = context.HttpContext.RequestServices.GetRequiredService(); + var logger = GetLogger(context.HttpContext.RequestServices); + var applicationManager = GetApplicationManager(context.HttpContext.RequestServices); // If an optional post_logout_redirect_uri was provided, validate it. if (!string.IsNullOrEmpty(context.PostLogoutRedirectUri))