| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- using System;
- using System.Linq;
- using Medallion.Threading;
- using Medallion.Threading.Redis;
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Cors;
- using Microsoft.AspNetCore.DataProtection;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Hosting;
- using StackExchange.Redis;
- using Volo.Abp;
- using Volo.Abp.Account;
- using Volo.Abp.Account.Web;
- using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
- using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite;
- using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling;
- using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
- using Volo.Abp.AspNetCore.Serilog;
- using Volo.Abp.Auditing;
- using Volo.Abp.Autofac;
- using Volo.Abp.BackgroundJobs;
- using Volo.Abp.Caching;
- using Volo.Abp.Caching.StackExchangeRedis;
- using Volo.Abp.DistributedLocking;
- using Volo.Abp.Localization;
- using Volo.Abp.Modularity;
- using Volo.Abp.UI.Navigation.Urls;
- using Volo.Abp.VirtualFileSystem;
- using Volo.Abp.PermissionManagement.EntityFrameworkCore;
- using Volo.Abp.TenantManagement.EntityFrameworkCore;
- using Volo.Abp.Identity.EntityFrameworkCore;
- using Volo.Abp.AuditLogging.EntityFrameworkCore;
- using Volo.Abp.EntityFrameworkCore;
- using Volo.Abp.OpenIddict.EntityFrameworkCore;
- using Volo.Abp.Threading;
- using Volo.Abp.Data;
- namespace AuthServer;
- [DependsOn(
- typeof(AbpAutofacModule),
- typeof(AbpCachingStackExchangeRedisModule),
- typeof(AbpDistributedLockingModule),
- typeof(AbpAccountWebOpenIddictModule),
- typeof(AbpAccountApplicationModule),
- typeof(AbpAccountHttpApiModule),
- typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule),
- typeof(AbpOpenIddictEntityFrameworkCoreModule),
- typeof(AbpPermissionManagementEntityFrameworkCoreModule),
- typeof(AbpAuditLoggingEntityFrameworkCoreModule),
- typeof(AbpIdentityEntityFrameworkCoreModule),
- typeof(AbpTenantManagementEntityFrameworkCoreModule),
- typeof(AbpAspNetCoreSerilogModule)
- )]
- public class AuthServerModule : AbpModule
- {
- public override void PreConfigureServices(ServiceConfigurationContext context)
- {
- PreConfigure<OpenIddictBuilder>(builder =>
- {
- builder.AddValidation(options =>
- {
- options.AddAudiences("AuthServer");
- options.UseLocalServer();
- options.UseAspNetCore();
- });
- });
- }
- public override void ConfigureServices(ServiceConfigurationContext context)
- {
- var hostingEnvironment = context.Services.GetHostingEnvironment();
- var configuration = context.Services.GetConfiguration();
- context.Services.AddOpenIddict().AddServer(options =>
- {
- options.UseAspNetCore()
- .EnableAuthorizationEndpointPassthrough()
- .EnableTokenEndpointPassthrough()
- .DisableTransportSecurityRequirement();
- });
- Configure<AbpLocalizationOptions>(options =>
- {
- options.Languages.Add(new LanguageInfo("ar", "ar", "العربية"));
- options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
- options.Languages.Add(new LanguageInfo("en", "en", "English"));
- options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)"));
- options.Languages.Add(new LanguageInfo("fi", "fi", "Finnish"));
- options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));
- options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in"));
- options.Languages.Add(new LanguageInfo("is", "is", "Icelandic", "is"));
- options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it"));
- options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar"));
- options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
- options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română"));
- options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
- options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak"));
- options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
- options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
- options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
- options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch", "de"));
- options.Languages.Add(new LanguageInfo("es", "es", "Español", "es"));
- options.Languages.Add(new LanguageInfo("el", "el", "Ελληνικά"));
- });
- Configure<AbpDbContextOptions>(options =>
- {
- options.UseMySQL();
- });
- Configure<AbpBundlingOptions>(options =>
- {
- options.StyleBundles.Configure(
- LeptonXLiteThemeBundles.Styles.Global,
- bundle =>
- {
- bundle.AddFiles("/global-styles.css");
- }
- );
- });
- Configure<AbpAuditingOptions>(options =>
- {
- //options.IsEnabledForGetRequests = true;
- options.ApplicationName = "AuthServer";
- });
- if (hostingEnvironment.IsDevelopment())
- {
-
- }
- Configure<AppUrlOptions>(options =>
- {
- options.RedirectAllowedUrls.AddRange(configuration["App:RedirectAllowedUrls"].Split(','));
- options.Applications["Web_App"].RootUrl = configuration["App:ClientUrl"];
- options.Applications["Web_App"].Urls[AccountUrlNames.PasswordReset] = "account/reset-password";
- });
- Configure<AbpBackgroundJobOptions>(options =>
- {
- options.IsJobExecutionEnabled = false;
- });
- Configure<AbpDistributedCacheOptions>(options =>
- {
- options.KeyPrefix = "AuthServer:";
- });
- var dataProtectionBuilder = context.Services.AddDataProtection().SetApplicationName("AuthServer");
- if (!hostingEnvironment.IsDevelopment())
- {
- var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]);
- dataProtectionBuilder.PersistKeysToStackExchangeRedis(redis, "AuthServer-Protection-Keys");
- }
-
- context.Services.AddSingleton<IDistributedLockProvider>(sp =>
- {
- var connection = ConnectionMultiplexer
- .Connect(configuration["Redis:Configuration"]);
- return new RedisDistributedSynchronizationProvider(connection.GetDatabase());
- });
- context.Services.AddCors(options =>
- {
- options.AddDefaultPolicy(builder =>
- {
- builder
- .WithOrigins(
- configuration["App:CorsOrigins"]
- .Split(",", StringSplitOptions.RemoveEmptyEntries)
- .Select(o => o.RemovePostFix("/"))
- .ToArray()
- )
- .WithAbpExposedHeaders()
- .SetIsOriginAllowedToAllowWildcardSubdomains()
- .AllowAnyHeader()
- .AllowAnyMethod()
- .AllowCredentials();
- });
- });
- }
- public override void OnApplicationInitialization(ApplicationInitializationContext context)
- {
- var app = context.GetApplicationBuilder();
- var env = context.GetEnvironment();
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
- app.UseAbpRequestLocalization();
- if (!env.IsDevelopment())
- {
- app.UseErrorPage();
- }
- app.UseCorrelationId();
- app.UseStaticFiles();
- app.UseRouting();
- app.UseCors();
- app.UseAuthentication();
- app.UseAbpOpenIddictValidation();
- app.UseMultiTenancy();
- app.UseUnitOfWork();
- app.UseAuthorization();
- app.UseAuditing();
- app.UseAbpSerilogEnrichers();
- app.UseConfiguredEndpoints();
- AsyncHelper.RunSync(async () =>
- {
- using (var scope = context.ServiceProvider.CreateScope())
- {
- await scope.ServiceProvider
- .GetRequiredService<IDataSeeder>()
- .SeedAsync();
- }
- });
- }
- }
|