130 lines
5.8 KiB
C#
130 lines
5.8 KiB
C#
// Copyright (c) Jan Škoruba. All Rights Reserved.
|
|
// Licensed under the Apache License, Version 2.0.
|
|
|
|
using System.IdentityModel.Tokens.Jwt;
|
|
using HealthChecks.UI.Client;
|
|
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
|
|
using Microsoft.AspNetCore.Hosting;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Hosting;
|
|
using NSwag.AspNetCore;
|
|
using Skoruba.AuditLogging.EntityFramework.Entities;
|
|
using LiteCharmsSecurity.Admin.Api.Configuration;
|
|
using Skoruba.Duende.IdentityServer.Admin.EntityFramework.Configuration.Configuration;
|
|
using LiteCharmsSecurity.Admin.EntityFramework.Shared.DbContexts;
|
|
using LiteCharmsSecurity.Admin.EntityFramework.Shared.Entities.Identity;
|
|
using Skoruba.Duende.IdentityServer.Admin.UI.Api.Configuration;
|
|
using Skoruba.Duende.IdentityServer.Admin.UI.Api.Helpers;
|
|
using Skoruba.Duende.IdentityServer.Shared.Configuration.Helpers;
|
|
using LiteCharmsSecurity.Shared.Dtos;
|
|
using LiteCharmsSecurity.Shared.Dtos.Identity;
|
|
using StartupHelpers = Skoruba.Duende.IdentityServer.Shared.Configuration.Helpers.StartupHelpers;
|
|
|
|
namespace LiteCharmsSecurity.Admin.Api
|
|
{
|
|
public class Startup
|
|
{
|
|
public Startup(IWebHostEnvironment env, IConfiguration configuration)
|
|
{
|
|
JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
|
|
HostingEnvironment = env;
|
|
Configuration = configuration;
|
|
}
|
|
|
|
public IConfiguration Configuration { get; }
|
|
|
|
public IWebHostEnvironment HostingEnvironment { get; }
|
|
|
|
public void ConfigureServices(IServiceCollection services)
|
|
{
|
|
var adminApiConfiguration = Configuration.GetSection(nameof(AdminApiConfiguration)).Get<AdminApiConfiguration>();
|
|
services.AddSingleton(adminApiConfiguration);
|
|
|
|
var databaseProviderConfiguration = Configuration.GetSection(nameof(DatabaseProviderConfiguration)).Get<DatabaseProviderConfiguration>();
|
|
var databaseMigration = StartupHelpers.GetDatabaseMigrationsConfiguration(Configuration, MigrationAssemblyConfiguration.GetMigrationAssemblyByProvider(databaseProviderConfiguration));
|
|
|
|
// Add DbContexts
|
|
RegisterDbContexts(services, databaseMigration);
|
|
|
|
// Add email senders which is currently setup for SendGrid and SMTP
|
|
services.AddEmailSenders(Configuration);
|
|
|
|
// Add authentication services
|
|
RegisterAuthentication(services);
|
|
|
|
// Add authorization services
|
|
RegisterAuthorization(services);
|
|
|
|
services.AddIdentityServerAdminApi<AdminIdentityDbContext, IdentityServerConfigurationDbContext, IdentityServerPersistedGrantDbContext, IdentityServerDataProtectionDbContext, AdminLogDbContext, AdminAuditLogDbContext, AdminConfigurationDbContext, AuditLog,
|
|
IdentityUserDto, IdentityRoleDto, UserIdentity, UserIdentityRole, string, UserIdentityUserClaim, UserIdentityUserRole,
|
|
UserIdentityUserLogin, UserIdentityRoleClaim, UserIdentityUserToken, UserIdentityPasskey,
|
|
IdentityUsersDto, IdentityRolesDto, IdentityUserRolesDto,
|
|
IdentityUserClaimsDto, IdentityUserProviderDto, IdentityUserProvidersDto, IdentityUserChangePasswordDto,
|
|
IdentityRoleClaimsDto, IdentityUserClaimDto, IdentityRoleClaimDto>(Configuration, adminApiConfiguration);
|
|
|
|
services.AddSwaggerServices(adminApiConfiguration);
|
|
|
|
services.AddIdSHealthChecks<IdentityServerConfigurationDbContext, IdentityServerPersistedGrantDbContext, AdminIdentityDbContext, AdminLogDbContext, AdminAuditLogDbContext, IdentityServerDataProtectionDbContext>(Configuration, adminApiConfiguration);
|
|
}
|
|
|
|
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, AdminApiConfiguration adminApiConfiguration)
|
|
{
|
|
app.AddForwardHeaders(Configuration);
|
|
|
|
if (env.IsDevelopment())
|
|
{
|
|
app.UseDeveloperExceptionPage();
|
|
}
|
|
|
|
app.UseOpenApi();
|
|
app.UseSwaggerUi(settings =>
|
|
{
|
|
settings.OAuth2Client = new OAuth2ClientSettings
|
|
{
|
|
ClientId = adminApiConfiguration.OidcSwaggerUIClientId,
|
|
AppName = adminApiConfiguration.ApiName,
|
|
UsePkceWithAuthorizationCodeGrant = true,
|
|
ClientSecret = null
|
|
};
|
|
});
|
|
|
|
app.UseRouting();
|
|
UseAuthentication(app);
|
|
app.UseCors();
|
|
app.UseAuthorization();
|
|
app.UseEndpoints(endpoints =>
|
|
{
|
|
endpoints.MapControllers();
|
|
|
|
endpoints.MapHealthChecks("/health", new HealthCheckOptions
|
|
{
|
|
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
|
|
});
|
|
});
|
|
}
|
|
|
|
public virtual void RegisterDbContexts(IServiceCollection services,
|
|
DatabaseMigrationsConfiguration databaseMigration)
|
|
{
|
|
services.AddDbContexts<AdminIdentityDbContext, IdentityServerConfigurationDbContext, IdentityServerPersistedGrantDbContext, AdminLogDbContext, AdminAuditLogDbContext, IdentityServerDataProtectionDbContext, AdminConfigurationDbContext, AuditLog>(Configuration, databaseMigration);
|
|
}
|
|
|
|
public virtual void RegisterAuthentication(IServiceCollection services)
|
|
{
|
|
services.AddApiAuthentication<AdminIdentityDbContext, UserIdentity, UserIdentityRole>(Configuration);
|
|
}
|
|
|
|
public virtual void RegisterAuthorization(IServiceCollection services)
|
|
{
|
|
services.AddAuthorizationPolicies();
|
|
}
|
|
|
|
public virtual void UseAuthentication(IApplicationBuilder app)
|
|
{
|
|
app.UseAuthentication();
|
|
}
|
|
}
|
|
}
|