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>
52 lines
1.9 KiB
Markdown
52 lines
1.9 KiB
Markdown
# 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:
|
|
|
|
```typescript
|
|
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:
|
|
|
|
```sql
|
|
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"`.
|