Nystart basert på arkitektonisk innsikt fra Sidelinja v1. Koden er ny, visjon og primitiver er validert gjennom tidligere arbeid. Inneholder: - Komplett arkitekturdokumentasjon (docs/arkitektur.md) - 6 vedtatte retninger (docs/retninger/) - Alle concepts, features, proposals og erfaringer fra v1 - Server-oppsett og drift (docs/setup/) - LiteLLM-konfigurasjon (API-nøkler via env) - Editor.svelte referanse fra v1 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1.9 KiB
Erfaring: Authentik OIDC-integrasjon
1. profile.sub er IKKE Authentik sin PostgreSQL-UUID
Authentik sin OIDC sub-claim er en SHA256-hash, ikke UUID-kolonnen fra authentik_core_user. Eksempel:
| Felt | Verdi |
|---|---|
Authentik DB uuid |
0ac94e00-015b-4e78-9f32-269fa6ce3f44 |
OIDC sub claim |
6af61f43c6647a237cbb381ee7788376a9bc20299c2c06281d9954d763e854f0 |
Bruk alltid sub-verdien fra OIDC som nøkkel i users.authentik_id. For å finne den riktige verdien for en bruker: logg inn og les profile.sub fra callback, eller sjekk JWT-tokenet.
2. @auth/sveltekit sin user.id er IKKE profile.sub
@auth/sveltekit genererer sin egen interne UUID for user.id i JWT. Denne overlever ikke mellom sesjoner og matcher ingenting i vår database.
For å bruke Authentik sub som bruker-ID:
callbacks: {
jwt({ token, user, profile }) {
if (user) token.id = user.id;
if (profile?.sub) token.authentik_sub = profile.sub;
return token;
},
session({ session, token }) {
if (session.user) {
// Bruk Authentik sub, IKKE token.id
session.user.id = (token.authentik_sub ?? token.id) as string;
}
return session;
}
}
profile er kun tilgjengelig i JWT-callbacken ved innlogging (ikke ved token-refresh), derfor må authentik_sub lagres i tokenet.
Referanse: web/src/lib/server/auth.ts
3. Redirect-URI i Authentik
@auth/sveltekit bruker callback-URL https://<domain>/auth/callback/<provider-id>. For oss: https://sidelinja.org/auth/callback/authentik.
Denne MÅ være registrert som redirect-URI i Authentik sin OAuth2-provider. Verifiser via:
SELECT _redirect_uris FROM authentik_providers_oauth2_oauth2provider
WHERE client_id = '<din client_id>';
Tips: Legg til en regex-variant for lokal utvikling: http://localhost:\d+/auth/callback/authentik med matching_mode: "regex".