diff --git a/src/Services/Identity/Identity.API/GlobalUsings.cs b/src/Services/Identity/Identity.API/GlobalUsings.cs
index bbbe458c9..a4ecca85f 100644
--- a/src/Services/Identity/Identity.API/GlobalUsings.cs
+++ b/src/Services/Identity/Identity.API/GlobalUsings.cs
@@ -1,4 +1,4 @@
-global using Azure.Core;
+global using Azure.Core;
global using Azure.Identity;
global using HealthChecks.UI.Client;
global using IdentityModel;
@@ -41,7 +41,6 @@ global using System.Collections.Generic;
global using System.ComponentModel.DataAnnotations;
global using System.Data.SqlClient;
global using System.IdentityModel.Tokens.Jwt;
-global using System.IO;
global using System.Linq;
global using System.Security.Claims;
global using System.Text.RegularExpressions;
diff --git a/src/Services/Identity/Identity.API/Identity.API.csproj b/src/Services/Identity/Identity.API/Identity.API.csproj
index 58f550997..93bf5b3a5 100644
--- a/src/Services/Identity/Identity.API/Identity.API.csproj
+++ b/src/Services/Identity/Identity.API/Identity.API.csproj
@@ -37,12 +37,6 @@
-
-
-
-
-
-
diff --git a/src/Services/Identity/Identity.API/Program.cs b/src/Services/Identity/Identity.API/Program.cs
index 2dafe5cbe..c0fa8fa7c 100644
--- a/src/Services/Identity/Identity.API/Program.cs
+++ b/src/Services/Identity/Identity.API/Program.cs
@@ -1,5 +1,4 @@
-var appName = "Identity.API";
-var builder = WebApplication.CreateBuilder();
+var builder = WebApplication.CreateBuilder(args);
if (builder.Configuration.GetValue("UseVault", false))
{
@@ -10,21 +9,43 @@ if (builder.Configuration.GetValue("UseVault", false))
builder.Configuration.AddAzureKeyVault(new Uri($"https://{builder.Configuration["Vault:Name"]}.vault.azure.net/"), credential);
}
-builder.AddCustomConfiguration();
-builder.AddCustomSerilog();
-builder.AddCustomMvc();
-builder.AddCustomDatabase();
-builder.AddCustomIdentity();
-builder.AddCustomIdentityServer();
-builder.AddCustomAuthentication();
-builder.AddCustomHealthChecks();
-builder.AddCustomApplicationServices();
+builder.Services.AddControllersWithViews();
+builder.Services.AddControllers();
+builder.Services.AddRazorPages();
-var app = builder.Build();
-if (app.Environment.IsDevelopment())
+builder.Services.AddDbContext(options => options.UseSqlServer(builder.Configuration.GetConnectionString("IdentityDb")));
+builder.Services.AddIdentity()
+ .AddEntityFrameworkStores()
+ .AddDefaultTokenProviders();
+
+builder.Services.AddIdentityServer(options =>
{
- app.UseDeveloperExceptionPage();
-}
+ options.IssuerUri = "null";
+ options.Authentication.CookieLifetime = TimeSpan.FromHours(2);
+
+ options.Events.RaiseErrorEvents = true;
+ options.Events.RaiseInformationEvents = true;
+ options.Events.RaiseFailureEvents = true;
+ options.Events.RaiseSuccessEvents = true;
+})
+.AddInMemoryIdentityResources(Config.GetResources())
+.AddInMemoryApiScopes(Config.GetApiScopes())
+.AddInMemoryApiResources(Config.GetApis())
+.AddInMemoryClients(Config.GetClients(builder.Configuration))
+.AddAspNetIdentity()
+.AddDeveloperSigningCredential(); // Not recommended for production - you need to store your key material somewhere secure
+
+builder.Services.AddAuthentication();
+builder.Services.AddHealthChecks()
+ .AddCheck("self", () => HealthCheckResult.Healthy())
+ .AddSqlServer(builder.Configuration.GetConnectionString("IdentityDb"),
+ name: "IdentityDB-check",
+ tags: new string[] { "IdentityDB" });
+builder.Services.AddTransient();
+builder.Services.AddTransient, EFLoginService>();
+builder.Services.AddTransient();
+
+var app = builder.Build();
var pathBase = builder.Configuration["PATH_BASE"];
if (!string.IsNullOrEmpty(pathBase))
@@ -35,16 +56,11 @@ app.UseStaticFiles();
// This cookie policy fixes login issues with Chrome 80+ using HHTP
app.UseCookiePolicy(new CookiePolicyOptions { MinimumSameSitePolicy = SameSiteMode.Lax });
-
app.UseRouting();
-
app.UseIdentityServer();
-
-
app.UseAuthorization();
app.MapDefaultControllerRoute();
-
app.MapHealthChecks("/hc", new HealthCheckOptions()
{
Predicate = _ => true,
@@ -54,29 +70,13 @@ app.MapHealthChecks("/liveness", new HealthCheckOptions
{
Predicate = r => r.Name.Contains("self")
});
-try
-{
- app.Logger.LogInformation("Seeding database ({ApplicationName})...", appName);
-
- // Apply database migration automatically. Note that this approach is not
- // recommended for production scenarios. Consider generating SQL scripts from
- // migrations instead.
- using (var scope = app.Services.CreateScope())
- {
- await SeedData.EnsureSeedData(scope, app.Configuration, app.Logger);
- }
- app.Logger.LogInformation("Starting web host ({ApplicationName})...", appName);
- app.Run();
-
- return 0;
-}
-catch (Exception ex)
+// Apply database migration automatically. Note that this approach is not
+// recommended for production scenarios. Consider generating SQL scripts from
+// migrations instead.
+using (var scope = app.Services.CreateScope())
{
- app.Logger.LogCritical(ex, "Host terminated unexpectedly ({ApplicationName})...", appName);
- return 1;
+ await SeedData.EnsureSeedData(scope, app.Configuration, app.Logger);
}
-finally
-{
- Serilog.Log.CloseAndFlush();
-}
\ No newline at end of file
+
+await app.RunAsync();
diff --git a/src/Services/Identity/Identity.API/ProgramExtensions.cs b/src/Services/Identity/Identity.API/ProgramExtensions.cs
deleted file mode 100644
index 19f5e71d2..000000000
--- a/src/Services/Identity/Identity.API/ProgramExtensions.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-using Serilog;
-
-namespace Microsoft.eShopOnContainers.Services.Identity.API;
-
-public static class ProgramExtensions
-{
- private const string AppName = "Identity API";
-
- public static void AddCustomConfiguration(this WebApplicationBuilder builder)
- {
- builder.Configuration.AddConfiguration(GetConfiguration()).Build();
-
- }
-
- public static void AddCustomSerilog(this WebApplicationBuilder builder)
- {
- var seqServerUrl = builder.Configuration["SeqServerUrl"];
- var logstashUrl = builder.Configuration["LogstashgUrl"];
-
- Log.Logger = new LoggerConfiguration()
- .MinimumLevel.Verbose()
- .Enrich.WithProperty("ApplicationContext", AppName)
- .Enrich.FromLogContext()
- .WriteTo.Console()
- .WriteTo.Seq(string.IsNullOrWhiteSpace(seqServerUrl) ? "http://seq" : seqServerUrl)
- .WriteTo.Http(string.IsNullOrWhiteSpace(logstashUrl) ? "http://localhost:8080" : logstashUrl, null)
- .ReadFrom.Configuration(builder.Configuration)
- .CreateLogger();
-
- builder.Host.UseSerilog();
- }
-
- public static void AddCustomMvc(this WebApplicationBuilder builder)
- {
- builder.Services.AddControllersWithViews();
- builder.Services.AddControllers();
- builder.Services.AddRazorPages();
-
- }
-
-
- public static void AddCustomDatabase(this WebApplicationBuilder builder) =>
- builder.Services.AddDbContext(
- options => options.UseSqlServer(builder.Configuration.GetConnectionString("IdentityDb")));
-
- public static void AddCustomIdentity(this WebApplicationBuilder builder)
- {
- builder.Services.AddIdentity()
- .AddEntityFrameworkStores()
- .AddDefaultTokenProviders();
- }
-
-
- public static void AddCustomIdentityServer(this WebApplicationBuilder builder)
- {
- var identityServerBuilder = builder.Services.AddIdentityServer(options =>
- {
- options.IssuerUri = "null";
- options.Authentication.CookieLifetime = TimeSpan.FromHours(2);
-
- options.Events.RaiseErrorEvents = true;
- options.Events.RaiseInformationEvents = true;
- options.Events.RaiseFailureEvents = true;
- options.Events.RaiseSuccessEvents = true;
- })
- .AddInMemoryIdentityResources(Config.GetResources())
- .AddInMemoryApiScopes(Config.GetApiScopes())
- .AddInMemoryApiResources(Config.GetApis())
- .AddInMemoryClients(Config.GetClients(builder.Configuration))
- .AddAspNetIdentity();
-
- // not recommended for production - you need to store your key material somewhere secure
- identityServerBuilder.AddDeveloperSigningCredential();
- }
-
- public static void AddCustomAuthentication(this WebApplicationBuilder builder)
- {
- builder.Services.AddAuthentication();
- }
-
- public static void AddCustomHealthChecks(this WebApplicationBuilder builder)
- {
- builder.Services.AddHealthChecks()
- .AddCheck("self", () => HealthCheckResult.Healthy())
- .AddSqlServer(builder.Configuration.GetConnectionString("IdentityDb"),
- name: "IdentityDB-check",
- tags: new string[] { "IdentityDB" });
- }
-
- public static void AddCustomApplicationServices(this WebApplicationBuilder builder)
- {
- builder.Services.AddTransient();
- builder.Services.AddTransient, EFLoginService>();
- builder.Services.AddTransient();
- }
-
- static IConfiguration GetConfiguration()
- {
- var builder = new ConfigurationBuilder()
- .SetBasePath(Directory.GetCurrentDirectory())
- .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
- .AddEnvironmentVariables();
-
- var config = builder.Build();
-
- if (config.GetValue("UseVault", false))
- {
- TokenCredential credential = new ClientSecretCredential(
- config["Vault:TenantId"],
- config["Vault:ClientId"],
- config["Vault:ClientSecret"]);
- builder.AddAzureKeyVault(new Uri($"https://{config["Vault:Name"]}.vault.azure.net/"), credential);
- }
-
- return builder.Build();
- }
-}