Files
CouchLog/WatchLog/Program.cs

88 lines
3.5 KiB
C#

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<WatchLogDataContext>(options => options.UseSqlite(connectionString));
builder.Services.AddHttpContextAccessor();
builder.Services.AddIdentityCore<AppUser>(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<IUserStore<AppUser>, MyUserStore>();
builder.Services.AddScoped<IPasswordHasher<AppUser>, PasswordHasher<AppUser>>();
// 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<App>()
.AddInteractiveServerRenderMode();
app.Run();
}
}
}