> ## Documentation Index
> Fetch the complete documentation index at: https://docs.klantel.be/llms.txt
> Use this file to discover all available pages before exploring further.

# Authenticatie

> Hoe Klantel sessies en JWT-cookies beheert

## Overzicht

Klantel gebruikt **JWT-cookies** voor authenticatie, niet API-keys. De sessie wordt server-side
opgeslagen voor intrekkingsmogelijkheid.

## Sessie-mechanisme

```
POST /login
  ↓
JWT aanmaken (HS256, 8 uur geldig)
  ↓
httpOnly cookie "klantel-session" plaatsen
  ↓
Elke request: cookie automatisch meegestuurd
  ↓
Server verifieert JWT + controleert sessie in DB
```

## Cookie-eigenschappen

| Eigenschap | Waarde                                 |
| ---------- | -------------------------------------- |
| Naam       | `klantel-session`                      |
| Algoritme  | HS256                                  |
| Geldigheid | 8 uur                                  |
| httpOnly   | Ja (niet toegankelijk voor JavaScript) |
| Secure     | Ja (alleen HTTPS)                      |
| SameSite   | `lax`                                  |

## Intrekbare sessies

Klantel slaat sessies ook op in de database. Dit maakt het mogelijk:

* Alle sessies van een gebruiker te beëindigen bij wachtwoordwijziging
* Sessies te intrekken bij verdacht gedrag
* Inzicht te geven in actieve sessies

## Inloggen

```http theme={null}
POST /login
Content-Type: application/x-www-form-urlencoded

loginNaam=gebruikersnaam&wachtwoord=...
```

Bij succes: `302 Found` + `Set-Cookie: klantel-session=...`

## Uitloggen

```http theme={null}
POST /logout
```

De sessie wordt onmiddellijk ingetrokken in de database. De cookie wordt verwijderd.

## Server Actions en beveiliging

Server Actions zijn publieke HTTP-eindpunten. De cookie beschermt hen **niet** automatisch.
Elke action begint met een expliciete sessiecheck:

```ts theme={null}
const { tenantId, gebruikerId } = await requireSession();
// of voor beheerdersfuncties:
const { tenantId } = await requireAdmin();
```

## Verwante pagina's

<CardGroup cols={2}>
  <Card title="API-overzicht" icon="book" href="/api/overzicht">
    Rate limits en foutformaten
  </Card>

  <Card title="Twee-factor-authenticatie" icon="shield" href="/handleiding/twee-factor-authenticatie">
    2FA instellen
  </Card>
</CardGroup>
