| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- using System.Linq;
- using Microsoft.AspNetCore.Builder;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.OpenApi.Models;
- using Volo.Abp;
- using Volo.Abp.Auditing;
- using Volo.Abp.Autofac;
- using Volo.Abp.EntityFrameworkCore;
- using Volo.Abp.Localization;
- using Volo.Abp.Modularity;
- using Volo.Abp.AspNetCore.MultiTenancy;
- using System;
- using Volo.Abp.Threading;
- using Volo.Abp.Data;
- using Volo.Abp.AspNetCore.Serilog;
- using Microsoft.AspNetCore.Cors;
- using Volo.Abp.MultiTenancy;
- using BaseService.EntityFrameworkCore;
- using System.Collections.Generic;
- using Microsoft.AspNetCore.Authentication.JwtBearer;
- using Volo.Abp.Security.Claims;
- using System.Security.Claims;
- namespace BaseService
- {
- [DependsOn(
- typeof(AbpAutofacModule),
- typeof(BaseServiceApplicationModule),
- typeof(BaseServiceEntityFrameworkCoreModule),
- typeof(BaseServiceHttpApiModule),
- typeof(AbpAspNetCoreMultiTenancyModule),
- typeof(AbpAspNetCoreSerilogModule)
- )]
- public class BaseServiceHostModule : AbpModule
- {
- private const string DefaultCorsPolicyName = "Default";
- public override void ConfigureServices(ServiceConfigurationContext context)
- {
- var configuration = context.Services.GetConfiguration();
- Configure<AbpMultiTenancyOptions>(options =>
- {
- options.IsEnabled = true;
- });
- context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
- .AddJwtBearer(options =>
- {
- options.Authority = configuration["AuthServer:Authority"];
- options.RequireHttpsMetadata = false;
- options.Audience = "BaseService";
- });
- context.Services.AddSwaggerGen(options =>
- {
- options.SwaggerDoc("v1", new OpenApiInfo { Title = "BaseService Service API", Version = "v1" });
- options.DocInclusionPredicate((docName, description) => true);
- options.CustomSchemaIds(type => type.FullName);
- options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
- {
- Description = "请输入JWT令牌,例如:Bearer 12345abcdef",
- Name = "Authorization",
- In = ParameterLocation.Header,
- Type = SecuritySchemeType.ApiKey,
- Scheme = "Bearer"
- });
- options.AddSecurityRequirement(new OpenApiSecurityRequirement()
- {
- {
- new OpenApiSecurityScheme
- {
- Reference = new OpenApiReference
- {
- Type = ReferenceType.SecurityScheme,
- Id = "Bearer"
- },
- Scheme = "oauth2",
- Name = "Bearer",
- In = ParameterLocation.Header,
- },
- new List<string>()
- }
- });
- });
- Configure<AbpDbContextOptions>(options =>
- {
- options.UseSqlServer();
- });
- //context.Services.AddStackExchangeRedisCache(options =>
- //{
- // options.Configuration = configuration["Redis:Configuration"];
- //});
- Configure<AbpAuditingOptions>(options =>
- {
- options.IsEnabledForGetRequests = true;
- options.ApplicationName = "BaseService";
- });
- context.Services.AddCors(options =>
- {
- options.AddPolicy(DefaultCorsPolicyName, builder =>
- {
- builder
- .WithOrigins(
- configuration["App:CorsOrigins"]
- .Split(",", StringSplitOptions.RemoveEmptyEntries)
- .Select(o => o.RemovePostFix("/"))
- .ToArray()
- )
- .WithAbpExposedHeaders()
- .SetIsOriginAllowedToAllowWildcardSubdomains()
- .AllowAnyHeader()
- .AllowAnyMethod()
- .AllowCredentials();
- });
- });
- //var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]);
- //context.Services.AddDataProtection()
- // .PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys");
- Configure<AbpLocalizationOptions>(options =>
- {
- options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
- options.Languages.Add(new LanguageInfo("en", "en", "English"));
- options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
- options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
- 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", "繁體中文"));
- });
- }
- public override void OnApplicationInitialization(ApplicationInitializationContext context)
- {
- var app = context.GetApplicationBuilder();
- app.UseCorrelationId();
- app.UseStaticFiles();
- app.UseRouting();
- app.UseCors(DefaultCorsPolicyName);
- app.UseAuthentication();
- app.UseMultiTenancy();
- app.Use(async (ctx, next) =>
- {
- var currentPrincipalAccessor = ctx.RequestServices.GetRequiredService<ICurrentPrincipalAccessor>();
- var map = new Dictionary<string, string>()
- {
- { "sub", AbpClaimTypes.UserId },
- { "role", AbpClaimTypes.Role },
- { "email", AbpClaimTypes.Email },
- { "name", AbpClaimTypes.UserName },
- };
- var mapClaims = currentPrincipalAccessor.Principal.Claims.Where(p => map.Keys.Contains(p.Type)).ToList();
- currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer))));
- await next();
- });
- app.UseAbpRequestLocalization();
- app.UseSwagger();
- app.UseSwaggerUI(options =>
- {
- options.SwaggerEndpoint("/swagger/v1/swagger.json", "BaseService Service API");
- });
- app.UseAuditing();
- app.UseAbpSerilogEnrichers();
- app.UseUnitOfWork();
- app.UseConfiguredEndpoints();
- AsyncHelper.RunSync(async () =>
- {
- using (var scope = context.ServiceProvider.CreateScope())
- {
- await scope.ServiceProvider
- .GetRequiredService<IDataSeeder>()
- .SeedAsync();
- }
- });
- }
- }
- }
|