Status: review
As a any team member, I want to authenticate using Keycloak single sign-on via OpenID Connect, so that I can securely access the application with my organizational credentials.
Campaign_Tracker.Server/campaign-tracker-client/_bmad-output/implementation-artifacts/_bmad-output/planning-artifacts/epics.md (Epic 1 / Story 1.3)_bmad-output/planning-artifacts/architecture.md_bmad-output/planning-artifacts/ux-design-specification.mdGPT-5 Codex
dotnet test .\Campaign_Tracker.Server.Tests\Campaign_Tracker.Server.Tests.csproj passed (4 tests).dotnet build .\campaign-tracker.sln passed with 0 warnings and 0 errors.npm test passed (2 files, 10 tests).npm run build passed; Vite reported a large chunk warning for the existing Ant Design bundle.npm run lint passed.dotnet build .\campaign-tracker.sln /p:UseAppHost=false passed with 0 warnings and 0 errors after Canopy Keycloak config alignment.dotnet test .\Campaign_Tracker.Server.Tests\Campaign_Tracker.Server.Tests.csproj /p:UseAppHost=false passed (4 tests) after Canopy Keycloak config alignment.dotnet test .\Campaign_Tracker.Server.Tests\Campaign_Tracker.Server.Tests.csproj /p:UseAppHost=false passed (5 tests) after adding .env ClientSecret override support.dotnet build .\campaign-tracker.sln /p:UseAppHost=false passed with 0 warnings and 0 errors after adding .env ClientSecret override support.dotnet test .\Campaign_Tracker.Server.Tests\Campaign_Tracker.Server.Tests.csproj /p:UseAppHost=false passed (6 tests) after moving authorization-code and refresh-token exchange behind server endpoints.npm test passed (2 files, 12 tests) after moving frontend token exchange to backend endpoints.dotnet build .\campaign-tracker.sln /p:UseAppHost=false passed with 0 warnings and 0 errors after token exchange fix.npm run build passed after token exchange fix; Vite reported the existing Ant Design large chunk warning./api/auth/session protected by authorization and returning the authenticated user's role-specific workspace path.canopy-web client ID, server-only client secret placeholder, and disabled HTTPS metadata for the current HTTP Keycloak endpoint..env configuration loader so Keycloak__ClientSecret overrides the appsettings.Development.json placeholder at startup without exposing the secret to the React client.Campaign_Tracker.Server.Tests/AuthEndpointTests.csCampaign_Tracker.Server.Tests/Campaign_Tracker.Server.Tests.csprojCampaign_Tracker.Server.Tests/DotEnvConfigurationTests.csCampaign_Tracker.Server.Tests/KeycloakTokenClientTests.csCampaign_Tracker.Server/Authentication/AuthenticationAuditEvent.csCampaign_Tracker.Server/Authentication/IAuthenticationAuditStore.csCampaign_Tracker.Server/Authentication/InMemoryAuthenticationAuditStore.csCampaign_Tracker.Server/Authentication/KeycloakTokenClient.csCampaign_Tracker.Server/Authentication/KeycloakOptions.csCampaign_Tracker.Server/Authentication/RoleWorkspaceResolver.csCampaign_Tracker.Server/Configuration/DotEnvConfiguration.csCampaign_Tracker.Server/Controllers/AuthSessionController.csCampaign_Tracker.Server/Controllers/AuthTokenController.csCampaign_Tracker.Server/Campaign_Tracker.Server.csprojCampaign_Tracker.Server/Program.csCampaign_Tracker.Server/appsettings.Development.jsonCampaign_Tracker.Server/appsettings.json_bmad-output/implementation-artifacts/1-3-keycloak-realm-configuration-oidc-integration.md_bmad-output/implementation-artifacts/sprint-status.yamlcampaign-tracker-client/src/App.csscampaign-tracker-client/src/App.tsxcampaign-tracker-client/src/auth/authContracts.test.tscampaign-tracker-client/src/auth/authContracts.tscampaign-tracker-client/src/auth/useOidcSession.tscampaign-tracker-client/src/workspace/WorkspaceShell.tsx| Date | Version | Description | Author |
|---|---|---|---|
| 2026-05-05 | 1.0 | Implemented Keycloak OIDC integration, JWT-protected API session endpoint, auth audit capture, frontend protected route/callback/refresh handling, and validation tests. | GPT-5 Codex |
| 2026-05-05 | 1.1 | Aligned Keycloak and CORS configuration with Canopy deployment values. | GPT-5 Codex |
| 2026-05-05 | 1.2 | Added server-side .env loading so Keycloak client secret overrides development placeholder at startup. |
GPT-5 Codex |
| 2026-05-05 | 1.3 | Moved Keycloak token exchange and refresh behind backend endpoints for confidential-client login. | GPT-5 Codex |
Powered by TurnKey Linux.