using WatchLog.Components; using WatchLog.Data; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; namespace WatchLog { public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); var connectionString = builder.Configuration.GetConnectionString("WatchLogDB"); // Add services to the container. builder.Services.AddRazorComponents() .AddInteractiveServerComponents(); builder.Services.AddDbContextFactory(options => options.UseSqlite(connectionString)); builder.Services.AddHttpContextAccessor(); builder.Services.AddIdentityCore(options => { // Hier könntest du Passwortregeln festlegen, z.B. options.Password.RequireDigit = false; options.Password.RequireNonAlphanumeric = false; options.Password.RequiredLength = 4; // Nur für Entwicklung! }) .AddSignInManager() // Fügt den SignInManager hinzu, der den Login-Prozess steuert. .AddDefaultTokenProviders(); // Nötig für Features wie Passwort-Reset. // 2. Jetzt sagen wir Identity, welche Klassen es für seine Aufgaben verwenden soll. // Dies ist der wichtigste Teil! builder.Services.AddScoped, MyUserStore>(); builder.Services.AddScoped, PasswordHasher>(); // 3. Da wir IdentityCore verwenden, müssen wir die Cookie-Authentifizierung selbst hinzufügen. // Die Konfiguration ist fast identisch zu deiner alten, aber sie ist jetzt // an das Identity-System gekoppelt. builder.Services.AddAuthentication(IdentityConstants.ApplicationScheme) .AddCookie(IdentityConstants.ApplicationScheme, options => { options.Cookie.Name = "WatchLogAuthCookie"; options.LoginPath = "/login"; options.LogoutPath = "/logout"; options.AccessDeniedPath = "/access-denied"; options.ExpireTimeSpan = TimeSpan.FromDays(1); options.SlidingExpiration = true; }); // 4. Die Autorisierungs-Policy ist perfekt und bleibt genau so! // Sie sorgt dafür, dass alle Seiten standardmäßig einen Login erfordern. builder.Services.AddAuthorization(options => { options.FallbackPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build(); }); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAntiforgery(); app.UseAuthentication(); app.UseAuthorization(); app.MapRazorComponents() .AddInteractiveServerRenderMode(); app.Run(); } } }