Backend: - Cookie + OIDC + API Key authentication schemes - ApiKeyAuthenticationHandler with SHA-256 validation and 24h cache - AuthController with login/logout/profile endpoints - API Key domain model (EventFlow aggregate, events, commands) - ApiKeyReadModel and repository for key validation - Database migration 002_ApiKeys.sql - CORS configuration for frontend Frontend: - authService.ts for login/logout/profile API calls - authStore.ts (Zustand) for user context state - ProtectedRoute component for route guards - Header updated with user display and logout - GraphQL client with credentials: include 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
24 lines
628 B
JSON
24 lines
628 B
JSON
{
|
|
"Logging": {
|
|
"LogLevel": {
|
|
"Default": "Information",
|
|
"Microsoft.AspNetCore": "Warning",
|
|
"EventFlow": "Information",
|
|
"Hangfire": "Information"
|
|
}
|
|
},
|
|
"AllowedHosts": "*",
|
|
"ConnectionStrings": {
|
|
"Default": "Host=localhost;Database=books;Username=postgres;Password=postgres;Include Error Detail=true"
|
|
},
|
|
"Cors": {
|
|
"AllowedOrigins": [
|
|
"http://localhost:3000"
|
|
]
|
|
},
|
|
"Keycloak": {
|
|
"MetadataAddress": "https://id.tatic.io/auth/realms/master/.well-known/openid-configuration",
|
|
"ClientId": "books",
|
|
"ClientSecret": "3fd1679b-4505-4e2b-9d19-0be19d4ae297"
|
|
}
|
|
}
|