%% Source projet : E:\Dev\Chiruca %% Auth : OIDC Keycloak natif Vikunja, realm chiruca %% Flux : Authorization Code Flow avec Google Identity Brokering + auto-creation compte %%{init: {'theme': 'base', 'sequence': {'mirrorActors': false}}}%% sequenceDiagram autonumber box rgb(30, 58, 95) Cote Utilisateur actor User as Navigateur end box rgb(30, 58, 95) Caddy araucaria .50 participant Caddy as Caddy
vk.arauco.online
TLS termination end box rgb(30, 74, 46) huitral .22 - Docker Compose participant VK as Vikunja
:3456 participant VKDB as PostgreSQL 16
vikunja-db :5432 end box rgb(74, 30, 58) npagnun .35 participant KC as Keycloak
kc.arauco.online
Realm chiruca end box rgb(42, 58, 74) Google participant Google as Google OAuth 2.0
accounts.google.com end Note over User, Google: Flux AuthN - OIDC Authorization Code Flow User ->>+ Caddy: GET https://vk.arauco.online Caddy ->>+ VK: HTTP :3456 VK -->>- Caddy: Page login Vikunja Caddy -->>- User: Login form + bouton "Se connecter avec Keycloak" User ->> User: Clic "Se connecter avec Keycloak" User ->>+ Caddy: GET /auth/openid/keycloak Caddy ->>+ VK: HTTP :3456 VK ->> VK: Generer state
VIKUNJA_AUTH_OPENID_PROVIDERS_KEYCLOAK_AUTHURL:
kc.arauco.online/realms/chiruca VK -->>- Caddy: 302 Location: kc.arauco.online/realms/chiruca
/protocol/openid-connect/auth
?client_id=vikunja
&redirect_uri=vk.arauco.online/auth/openid/keycloak
&scope=openid+profile+email
&response_type=code Caddy -->>- User: Redirect vers Keycloak User ->>+ KC: GET /realms/chiruca/.../auth KC -->>- User: Page login Keycloak
(formulaire + bouton Google) User ->> KC: Clic "Login with Google" KC ->>+ Google: Redirect OAuth2
accounts.google.com/o/oauth2/auth User ->> Google: Authentification Gmail
+ consentement scopes Google -->>- KC: Code + ID Token
(sub, email, name, picture) KC ->> KC: Identity Brokering
First Broker Login si nouveau
Creer/lier compte chiruca KC ->> KC: Attacher roles:
Client vikunja: admin | editor | viewer
Realm: admin | user | gest-taches
Heritage depuis groupe KC -->> User: 302 + code authorization
-> vk.arauco.online/auth/openid/keycloak User ->>+ Caddy: GET /auth/openid/keycloak?code=xxx&state=yyy Caddy ->>+ VK: HTTP :3456 VK ->> VK: Verifier state VK ->>+ KC: POST /realms/chiruca/protocol/openid-connect/token
{grant_type: authorization_code,
code: xxx, client_id: vikunja,
client_secret: ****} KC -->>- VK: JWT access_token + ID token + refresh_token VK ->> VK: Valider ID token (signature, iss, aud, exp) VK ->> VK: Extraire claims: sub, email, preferred_username alt Premier login OIDC VK ->> VKDB: INSERT user (auto-creation)
email, username depuis claims VKDB -->> VK: User cree Note over VK: Auto-creation compte Vikunja
au premier login OIDC else Utilisateur existant VK ->> VKDB: SELECT user WHERE issuer_id = sub VKDB -->> VK: User existant end VK ->> VK: Generer JWT interne
(VIKUNJA_SERVICE_JWTSECRET) VK -->>- Caddy: 200 + Set-Cookie / JWT token Caddy -->>- User: Session Vikunja active Note over User, Google: AuthZ - Roles Keycloak dans JWT claims rect rgb(74, 58, 30) Note over User, KC: Mapping groupes Keycloak -> permissions Vikunja Note over KC: /admins -> vk: admin (gestion complete) Note over KC: /equipe-terrain -> vk: editor (creer/editer taches) Note over KC: /consultants -> vk: viewer (lecture seule) end Note over User, VK: Acces API authentifie User ->>+ Caddy: GET /api/v1/projects
Authorization: Bearer JWT_INTERNE Caddy ->>+ VK: HTTP :3456 VK ->> VK: Verify JWT (VIKUNJA_SERVICE_JWTSECRET) VK ->> VKDB: SELECT projects WHERE user has access VKDB -->> VK: Projets autorises VK -->>- Caddy: 200 JSON Caddy -->>- User: Liste projets Note over User, VK: Synchronisation CalDAV / ICS User ->>+ Caddy: PROPFIND /dav/principals/USERNAME/
Authorization: Bearer JWT Caddy ->>+ VK: HTTP :3456 VK ->> VK: Auth CalDAV via JWT VK ->> VKDB: Calendriers de l'utilisateur VKDB -->> VK: Listes + taches VK -->>- Caddy: 207 Multi-Status XML Caddy -->>- User: Donnees CalDAV Note over User, VK: Integration Home Assistant participant HA as Home Assistant
ha.arauco.online HA ->>+ VK: GET /api/v1/projects/ID/tasks
Authorization: Bearer JWT_HA_SERVICE VK ->> VK: Auth API token VK ->> VKDB: Taches du projet VKDB -->> VK: Resultats VK -->>- HA: JSON taches -> todo entities HA