Files
limier/docs/03-authentik.md
hcornet 78fb13b0e5
CI / Backend — lint, types, tests (push) Failing after 4m44s
CI / Interface — types et compilation (push) Successful in 10m23s
CI / Construction des images (sans publication) (push) Skipped
first sync
2026-09-12 13:10:16 +02:00

4.1 KiB

Configuration Authentik

Procédure pour l'instance authentik.tips-of-mine.com, en suivant les conventions déjà en place sur tes autres applications.

1. Groupes

Répertoire → Groupes. Créer, selon la convention GL-<app> / GL-<app>-Admin :

Groupe Effet dans Limier
GL-Limier plan interne — aucun quota mensuel
GL-Limier-Admin plan interne + accès à l'espace d'administration

Les visiteurs qui s'inscrivent sans appartenir à ces groupes reçoivent le plan gratuit et son quota. L'appartenance est relue à chaque connexion : retirer quelqu'un d'un groupe lui retire ses droits à sa prochaine ouverture de session, sans intervention en base.

2. Fournisseur OAuth2

Applications → Fournisseurs → Créer → OAuth2/OpenID.

Champ Valeur
Nom Tips-Of-Mine-Limier
Type de client Confidentiel
Flux d'autorisation default-provider-authorization-implicit-consent
URIs de redirection https://limier.tips-of-mine.com/api/auth/retour
Clé de signature authentik Token Signing

Le piège rencontré sur Enclume. L'URI va dans « URIs de redirection », pas dans « URI de déconnexion ». Saisie au mauvais endroit, la première connexion échoue sur Redirect URI Error et le champ correct reste vide.

Relever l'identifiant et le secret du client pour le .env.

3. Application

Applications → Applications → Créer.

Champ Valeur
Nom Limier
Slug limier
Fournisseur Tips-Of-Mine-Limier

Le slug détermine l'émetteur : https://authentik.tips-of-mine.com/application/o/limier/. Il doit correspondre exactement à LIMIER_OIDC_ISSUER.

Sur l'intégration Cloudflare Access, un slug erroné avait produit un 404 sur /jwks/ — l'intégration n'avait jamais abouti sans que rien ne le signale. Vérifier : curl -s https://authentik.tips-of-mine.com/application/o/limier/.well-known/openid-configuration | jq .issuer

Lier ensuite les deux groupes à l'application (onglet Liaisons), pour que l'application reste cloisonnée comme les sept autres.

4. La revendication groups

Depuis la 2026.8, les correspondances par défaut exposent bien les groupes — le test de Cloudflare Access l'a confirmé, la revendication arrivait au niveau racine sans correspondance personnalisée.

Si l'instance est plus ancienne, rattacher la correspondance de portée « OAuth Mapping: OpenID groups » déjà créée pour Grafana, Gitea et Harbor. Rappel : elle doit utiliser request.user.groups et non request.user.ak_groups, relation dépréciée depuis la 2026.8.

Limier prévoit les deux cas : si la revendication est absente du jeton d'identité, il interroge userinfo.

5. Vérification

Après docker compose up -d :

  1. Ouvrir https://limier.tips-of-mine.com → « Se connecter ».
  2. Redirection vers Authentik, authentification, retour sur l'interface.
  3. Le nom et le quota apparaissent en haut à droite.
  4. Membre de GL-Limier-Admin : curl sur /api/admin/tableau-de-bord renvoie 200 ; sinon, 403.

En cas d'échec : docker compose logs limier-api | grep -i auth. Les messages sont explicites (decouverte_oidc_impossible, etat_oidc_incoherent, echec_validation_identite) et ne contiennent jamais de jeton.

Ce que Limier ne fait pas

Aucune gestion de mot de passe, aucun compte local, aucune réinitialisation. Authentik est la seule source d'identité. Le cookie de session ne porte que l'identifiant interne de l'utilisateur : plan et droits sont relus en base à chaque requête.