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
657 B
C#
24 lines
657 B
C#
namespace Books.Api.EventFlow.Repositories;
|
|
|
|
public interface IApiKeyRepository
|
|
{
|
|
Task<ApiKeyValidationDto?> GetByIdForValidationAsync(string apiKeyId, CancellationToken cancellationToken = default);
|
|
Task<IReadOnlyList<ApiKeyDto>> GetByCompanyIdAsync(string companyId, CancellationToken cancellationToken = default);
|
|
}
|
|
|
|
public record ApiKeyValidationDto(
|
|
string ApiKeyId,
|
|
string Name,
|
|
string KeyHash,
|
|
string CompanyId,
|
|
bool IsActive);
|
|
|
|
public record ApiKeyDto(
|
|
string Id,
|
|
string Name,
|
|
string CompanyId,
|
|
string CreatedBy,
|
|
DateTime CreatedAt,
|
|
bool IsActive,
|
|
DateTime? RevokedAt,
|
|
string? RevokedBy);
|