Stalwart Authelia OIDC

Stalwart Authelia OIDC

Notes

Stalwart Authelia OIDC

OpenID Connect 1.0

  1. Le OpenID Connect 1.0 client_id paramètre:
    1. Cela doit être une valeur unique pour chaque client.
    2. La valeur utilisée dans ce guide est simplement à des fins de lisibilité et de démonstration et vous ne devriez pas utiliser cette valeur dans la production et devrait plutôt utiliser le Comment générer un identifiant client ou un secret client? FAQ. Nous recommandons 64 caractères aléatoires, mais vous pouvez utiliser n’importe quelle valeur arbitraire qui répond aux autres critères.
    3. Cela ne doit contenir que des caractères sans réserve RFC3986.
    4. Cela ne doit pas dépasser 100 caractères de longueur.
  2. Le OpenID Connect 1.0 client_secret paramètre:
    1. La valeur utilisée dans ce guide est simplement à des fins de démonstration et vous ne devriez absolument pas l’utiliser valeur dans la production et devrait plutôt utiliser le Comment puis-je générer un identifiant client ou un secret client ? FAQ.
    2. Cette chaîne peut être stockée sous forme de texte clair dans la configuration d’Authelia, mais ce comportement est obsolète et ne l’est pas garantie d’être soutenu à l’avenir. Voir le guide Plaintext pour plus information.
    3. Lorsque le secret est stocké sous forme de hachage dans la configuration Authelia (fortement recommandé), le coût de Le hachage peut, si trop grand, causer des délais d’attente pour les clients. Voir le Régler le guide des facteurs de travail pour plus d’informations.
  3. L’exemple de configuration pour Authelia:
    1. Ne contient qu’un exemple de configuration pour l’enregistrement du client et vous DEVEZ également configurer les exigences éléments du guide de configuration du fournisseur OpenID Connect 1.0.
    2. Ne contient qu’une petite partie de toutes les options disponibles pour un client enregistré et les utilisateurs peuvent souhaiter configurer des portions qui ne font pas partie de ce guide ou les configurer différemment, car il est important de à la fois vous familiariser avec les autres options disponibles et l’effet de chacune des options configurées dans cette section en consultant la configuration des clients OpenID Connect 1.0 guide.

      Hypothèses

Cet exemple fait les hypothèses suivantes:

  • Application Root URL: https://example.example.com/
  • Authelia Root URL: https://auth.example.com/
  • ID du client: stalwart
  • Secret du client: insecure_secret

Certaines des valeurs présentées dans ce guide peuvent être automatiquement remplacées par des variables de documentation.

Authelia

Ce client est créé à titre d’exemple, mais Stalwart n’utilise pas directement ce client, il ne fait que poser des requêtes le point de terminaison Introspection ou Information utilisateur donné un Token d’accès.
Cela signifie que vous devez vous procurer le jeton d’accès concerné vous-même pour l’utiliser.

1
# Générer 

Dans cet exemple, nous l’émettons à une application qui a un URI différent de Stalwart qui permet à cette application de tirer parti d’Auth 2.0 pour s’authentifier au nom des utilisateurs.

1
2
3
4
root@alder:/home/yick# authelia crypto hash generate pbkdf2 --variant sha512 --random --random.length 72 --random.charset rfc3986
Random Password: Zs37oSgXqxnWwnCK8fDmOiFzple2Ht9nGFusUMtpTU_1kPFcXf-PXvH.f1Ut1XVkJpjU7mlU
Digest: $pbkdf2-sha512$310000$pY.ORz/OvWLI63RSay1oPQ$X3k3G3cTjcbFfNwA81hm3U3H8HXZret1mLs2Hbp.fzmgFUACY8VkE7OP7cpOTIonm.auMyjbP74BApER20A5gA

La configuration YAML suivante est un exemple de configuration client Authelia pour une utilisation avec Stalwart qui opére avec l’exemple d’application:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
identity_providers:
  oidc:
    hmac_secret: 'CHANGEZ-MOI'
    jwks:
      - key_id: 'authelia'
        algorithm: 'RS256'
        use: 'sig'
        certificate_chain: |
          -----BEGIN CERTIFICATE-----
          MIIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
          -----END CERTIFICATE-----
        key: |
          -----BEGIN PRIVATE KEY-----
          MIIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
          -----END PRIVATE KEY-----
    enable_client_debug_messages: false
    minimum_parameter_entropy: 8
    enforce_pkce: 'public_clients_only'
    enable_pkce_plain_challenge: false
    enable_jwt_access_token_stateless_introspection: false
    discovery_signed_response_alg: 'none'
    discovery_signed_response_key_id: ''
    require_pushed_authorization_requests: false
    lifespans:
      access_token: '1h'
      authorize_code: '1m'
      id_token: '1h'
      refresh_token: '90m'
    cors:
      endpoints:
        - authorization
        - token
        - revocation
        - introspection
        - userinfo
      allowed_origins:
        - https://immich.rnmkcy.eu 
        - https://yannig.net
      allowed_origins_from_client_redirect_uris: false

    clients:
      - client_id: 'stalwart-webui'
        client_name: 'Stalwart'
        public: true
        authorization_policy: 'two_factor'
        require_pkce: true
        pkce_challenge_method: 'S256'
        redirect_uris:
          - 'https://yannig.net/admin/oauth/callback'
        scopes:
          - 'openid'
          - 'profile'
          - 'email'
          - 'groups'
          - 'offline_access'
        response_types:
          - 'code'
        grant_types:
          - 'authorization_code'
          - 'refresh_token'
        token_endpoint_auth_method: 'none'

Paramétrage Stalwart Web GUI

Configurer Stalwart à l’aide de l’interface graphique Web B.

Configurer Stalwart pour utiliser Authelia en tant que fournisseur OpenID Connect 1.0, se connecter à Stalwart.

Basé sur la configuration Authelia que tu as collée et la documentation officielle pour Authelia + Stalwart, voici la procédure exacte pour paramétrer OIDC dans Stalwart via la Web GUI.

Settings → Authentication → Directories

Directory

  • Directory type : OpenID Connect
  • Description : authelia (C’est juste un texte libre, l’ID réel est implicitement le même que le nom du directory dans l’UI).

Provider

  • Issuer URL* :https://auth.rnmkcy.eu (C’est l’URL de base de ton Authelia, documenté dans la doc officielle pour Authelia + Stalwart).[authelia]

  • Required Audience (optional) : stalwart (Cela correspond à client_id = stalwart dans Authelia).

  • Required Scopes : email openid (Cela est suggéré par la doc officielle : openid et email sont les scopes essentiels).[authelia]
    Tu peux aussi mettre email openid profile si tu veux le profil, mais email openid suffit.

Claims

  • Username Claim* : preferred_username (C’est le champ retourné par Authelia qui contient le nom d’utilisateur principal).[authelia]

  • Username Domain (optional) : yannig.net (Si preferred_username est un nom simple sans @, comme yannig, ce domaine sera ajouté automatiquement pour former yannig@yannig.net).

  • Name Claim (optional) : name (Champ pour le nom d’affichage, par exemple Yannig X).

  • Groups Claim (optional) : groups (Si tu veux que Stalwart utilise les groupes d’Authelia pour les permissions ou rôles).

Settings → Authentication → General

Authentication Directory

  • Authentication Directory (optional) : authelia (C’est le Directory Id du Directory OpenID Connect que tu as créé précédemment).

Cela signifie :

  • Stalwart n’utilise plus l’annuaire interne pour l’authentification.
  • Il utilise l’annuaire externe authelia (OpenID Connect) pour authentifier les utilisateurs.

Les autres paramètres (Password Policy, Default Roles, App Passwords) s’appliquent uniquement à l’annuaire interne et ne sont pas utilisés pour Authelia.

Password Policy (non utilisé pour Authelia)

  • Hash Algorithm, Min Length, Max Length, Min Strength, Default Expiry :
    Ces paramètres ne s’appliquent pas aux utilisateurs authentifiés via Authelia.
    Ils ne concernent que :

    • Les comptes créés dans l’annuaire interne,
    • Si tu viens d’activer Authelia, tu peux laisser les valeurs par défaut ou ne pas les modifier.

Default Roles

Tu peux laisser les rôles par défaut ou les adapter selon tes besoins :

  • User Roles : User (Rôle par défaut pour les comptes utilisateurs).
  • Group Roles : Group
  • Admin Roles : System Administrator

Ces rôles sont assignés aux nouveaux comptes créés dans l’annuaire interne, mais pour Authelia, les permission peuvent être assignées via les groupes OU via les claims OIDC.

App Passwords

  • Max App Passwords (optional) : 5 (Nombre maximal de mots de passe d’application par utilisateur).
  • Max API Keys (optional) : 5

Ces paramètres s’appliquent aussi bien à l’annuaire interne et à l’annuaire externe ; ils limitent le nombre de mots de passe d’application et de clés API que chaque utilisateur peut créer.

Résumé configuration complète

1. Créer le Directory OpenID Connect

  • Settings → Authentication → Directories → Create Directory :

    • Directory type : OpenID Connect
    • Description : authelia
    • Issuer URL* : https://auth.rnmkcy.eu
    • Required Audience : stalwart
    • Required Scopes : email openid
    • Username Claim* : preferred_username
    • Username Domain : yannig.net
    • Name Claim : name
    • Groups Claim : groups
    • Save & Reload

2. Activer Authelia comme source principale

  • Settings → Authentication → General :
    • Authentication Directory (optional) : authelia
    • Laisser les autres paramètres par défaut ou les adapter selon tes besoins.
    • Sauvegarde

3. Créer les comptes utilisateurs (précréation recommandée)

  • Accounts → Create Account :
    • Login : preferred_username (ex. yannig)
    • Email : email dans Authelia (ex. yannig@yannig.net)

En suivant cette configuration, Stalwart utilisera Authelia comme fournisseur OIDC pour l’authentification, et tu n’as pas besoin de créer d’“OAuth Client” dans Stalwart.

Configuration via stalwart-cli

Pour revenir à l’annuaire interne

1
stalwart-cli update Authentication --field directoryId=null

Pour afficher la configuration complète d’un’ annuaire OIDC Authelia

A-Récupèrer son ID exact

1
stalwart-cli query Directory  # Id et type

Affiche l’objet

1
stalwart-cli get Directory <Id>

get affiche l’objet de configuration, tandis que query sert à lister les annuaires.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
stalwart-cli query Directory
Id            Type
io1j29vaa0aa  Oidc

stalwart-cli get Directory io1j29vaa0aa
Type: OpenID Connect

Directory
  Description: authelia

Provider
  Issuer URL:        https://auth.rnmkcy.eu
  Required Audience: stalwart-webui
  Required Scopes:   email, openid

Claims
  Username Claim:  preferred_username
  Username Domain: yannig.net
  Name Claim:      name
  Groups Claim:    groups
  Tenant:          <none>

Snapshot et ndjson

Le snapshot est un plan d’opérations idempotentes : il met à jour les objets existants ou les crée s’ils sont absents, sans supprimer les autres objets. Les secrets ne sont inclus que si le snapshot a été créé avec --include-secrets et que le serveur les a effectivement fournis.

Sauvegarder une configuration

Pour enregistrer une copie de la configuration du serveur dans un fichier :

1
stalwart-cli snapshot Directory --allow-unresolved Tenant --output directories.ndjson

Retour commande ci-dessus

1
2
3
4
5
6
7
snapshot: 3 upserts, 0 singletons
  fetching Directory...
    1 fetched
    Directory (Oidc): 1
    Directory (Sql): 0
    Directory (Ldap): 0
snapshot complete

Le contenu du fichier directories.ndjson

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
  "@type": "upsert",
  "object": "Directory",
  "matchOn": [
    "description"
  ],
  "value": {
    "directory-io1j29vaa0aa": {
      "@type": "Oidc",
      "claimUsername": "preferred_username",
      "requireScopes": {
        "email": true,
        "openid": true
      },
      "issuerUrl": "https://auth.rnmkcy.eu",
      "claimGroups": "groups",
      "description": "authelia",
      "requireAudience": "stalwart-webui",
      "claimName": "name",
      "usernameDomain": "yannig.net",
      "memberTenantId": null
    }
  }
}

Attention : l’objet Directory configure l’annuaire d’authentification OIDC de Stalwart. Ce n’est pas la configuration du client OIDC de l’interface Web (stalwart-webui) enregistrée dans Authelia.

Restaurer une configuration

Utilise apply pour restaurer le plan NDJSON exporté par snapshot :

1
stalwart-cli apply --file directories.ndjson

Le fichier est appliqué au serveur sélectionné par ta configuration CLI (STALWART_URL et tes identifiants habituels). Pour cibler explicitement un serveur :

1
stalwart-cli --url https://mail.example.com apply --file directories.ndjson

Avant de modifier le serveur, tu peux vérifier le plan sans l’appliquer :

1
stalwart-cli apply --file directories.ndjson --dry-run