using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Tokens; using OpenIddict.Validation.AspNetCore; namespace Fengling.AuthService.Configuration; public static class OpenIddictSetup { public static IServiceCollection AddOpenIddictConfiguration(this IServiceCollection services, IConfiguration configuration) { services.AddOpenIddict() .AddCore(options => { options.UseEntityFrameworkCore() .UseDbContext(); }) .AddServer(options => { options.SetIssuer(configuration["OpenIddict:Issuer"] ?? "https://auth.fengling.local"); options.AddDevelopmentEncryptionCertificate() .AddDevelopmentSigningCertificate(); options.AllowAuthorizationCodeFlow() .AllowPasswordFlow() .AllowRefreshTokenFlow() .RequireProofKeyForCodeExchange(); options.RegisterScopes("api", "offline_access"); options.UseAspNetCore(); }) .AddValidation(options => { options.UseLocalServer(); options.UseAspNetCore(); }); services.AddAuthentication(options => { options.DefaultAuthenticateScheme = OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme; options.DefaultChallengeScheme = OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme; }); return services; } }