Documentation10 min de lecture

Sécuriser les accès à Odoo : authentification unique, sessions, clés d'API

Trois modules OCA du dépôt `server-auth` ferment les trois portes d'accès à une instance Odoo : `auth_oidc` (18.0.1.1.0) branche l'authentification sur votre annuaire d'entreprise, `auth_session_timeout` déconnecte les sessions inactives au bout de 7 200 secondes par défaut, et `auth_api_key` (18.0.1.0.2) donne une clé révocable par intégration. Lequel règle le problème des comptes oubliés, et la dépendance Python à ne pas confondre.

Contrôle d'accès et authentification sur un système d'information

Les incidents de sécurité d'une PME viennent rarement d'une attaque sophistiquée : ils viennent d'un compte d'ancien salarié resté actif, d'une session ouverte sur un poste d'atelier, et d'un mot de passe d'intégration qui traîne dans un fichier de configuration.

Trois modules communautaires traitent exactement ces trois cas. Aucun ne coûte de licence, et le premier — l'authentification unique — est celui qui a le meilleur rapport effort / effet de tout le socle.

Résumé

Trois modules ferment les trois portes d'une instance : l'authentification unique branchée sur votre annuaire d'entreprise, l'expiration des sessions inactives, et une clé d'API révocable par intégration.

Le premier a le meilleur rapport effort-effet de tout le socle, parce qu'il règle le risque des comptes d'anciens salariés : désactiver le compte dans l'annuaire coupe l'accès. Deux pièges — la dépendance Python python-jose, à ne pas confondre avec jose, et un délai de session par défaut de deux heures, beaucoup trop long sur un poste partagé.

L'essentiel

  • auth_oidc : connexion via un fournisseur OpenID Connect (Azure AD, Keycloak, tout fournisseur compatible). Un départ coupe l'accès immédiatement.
  • Dépendance Python python-jose à installer sur le serveur — à ne pas confondre avec le paquet PyPI jose, qui est différent.
  • auth_session_timeout : expiration des sessions inactives, réglée par un paramètre système, 7 200 secondes (2 h) par défaut.
  • auth_api_key : une clé secrète par intégration, transmise dans l'en-tête HTTP API-KEY, gérée depuis un écran central.
  • Deux fournisseurs Azure AD préconfigurés — mono-tenant et multi-tenant — désactivés par défaut.

Ce que les trois modules ajoutent à l'instance

auth_oidcauth_session_timeoutauth_api_key
Modèles étendus——4
Champs ajoutés12612
Menus001
Vues103
Version18.0.1.1.0—18.0.1.0.2
LicenceAGPL-3AGPL-3LGPL-3
Dépend deauth_oauth— (aucune clé depends)base_setup

auth_session_timeout est le module le plus discret de tout le socle : aucun menu, aucune vue, aucun modèle. Il surcharge le mécanisme d'authentification HTTP d'Odoo et se règle par un seul paramètre système. C'est aussi pour cela qu'on oublie son existence — et qu'on ne pense pas à vérifier son délai.

auth_oidc : l'authentification unique, et le problème des comptes oubliés

C'est le module qui règle le risque le plus concret d'une PME : les accès d'un salarié parti il y a six mois. Avec une authentification branchée sur votre annuaire d'entreprise, désactiver le compte dans l'annuaire coupe l'accès à Odoo — il n'y a plus de geste à ne pas oublier.

Le module étend le auth_oauth standard pour gérer OpenID Connect : récupération et vérification cryptographique du jeton d'identité (clés publiques JWKS, signature RS256), et construction du lien de connexion avec les paramètres requis — nonce, response_type, PKCE.

Mise en place avec Azure AD

  1. Paramètres ▸ Utilisateurs et Sociétés ▸ OAuth Providers.
  2. Ouvrir la fiche préexistante Azure AD Single Tenant si l'accès doit être limité aux utilisateurs de votre tenant, ou Azure AD Multitenant pour ouvrir à d'autres organisations. Les deux sont créées par le module et désactivées par défaut.
  3. Côté Azure : créer une application web avec OpenID et le flux « code », avec l'URL de redirection <url du serveur>/auth_oauth/signin.
  4. Renseigner sur la fiche Odoo : Auth Flow, Client ID, client_secret, Token URL, JWKS URL, et éventuellement End Session URL pour gérer la déconnexion côté fournisseur.
  5. Compléter Token Map si les claims de votre fournisseur ne correspondent pas aux clés attendues par Odoo.
  6. Cocher Allowed (champ standard d'auth_oauth) pour rendre le fournisseur visible sur la page de connexion.

Fiche d'un fournisseur OAuth Azure AD dans Odoo : le flux d'authentification, l'identifiant client et les URL de jeton et de clés JWKS
Fiche d'un fournisseur OAuth Azure AD dans Odoo : le flux d'authentification, l'identifiant client et les URL de jeton et de clés JWKS

Configuration des claims optionnels à activer côté Azure pour que les informations attendues par Odoo soient transmises
Configuration des claims optionnels à activer côté Azure pour que les informations attendues par Odoo soient transmises

Le piège d'installation à connaître avant de commencer : le module déclare une dépendance Python externe, python-jose, indispensable au décodage et à la vérification des jetons. Il ne faut pas la confondre avec le paquet PyPI nommé jose, qui est un autre projet. Sur un hébergement que vous ne maîtrisez pas, c'est la première chose à faire vérifier.

Le flux à choisir

Deux flux sont proposés : authorization code, recommandé, et implicit, déconseillé. Il n'y a pas d'arbitrage à faire — prenez le premier. Le second existe pour la compatibilité avec des fournisseurs anciens.

auth_session_timeout : le réglage qu'on ne trouve pas

Ce module n'a pas d'interface. Son délai se règle dans un paramètre système, ce qui en fait le réglage de sécurité le plus souvent ignoré d'une instance.

  1. Activer le mode développeur si nécessaire.
  2. Paramètres ▸ Technique ▸ Paramètres ▸ Paramètres système.
  3. Chercher la clé inactive_session_time_out_delay.
  4. Le champ Valeur contient le délai en secondes — valeur installée par défaut : 7200, soit deux heures.
  5. Modifier et enregistrer : le module invalide son cache à l'écriture, la nouvelle valeur s'applique aux requêtes suivantes.

À chaque requête d'un utilisateur connecté, le serveur compare la date de dernière activité de la session au délai configuré. Au-delà, la session est terminée proprement et l'utilisateur revient à l'écran de connexion. Certaines URL techniques sont exclues du contrôle, pour ne pas prolonger une session par du trafic automatique.

Quel délai choisir ? Deux heures conviennent à un poste individuel. Sur un poste partagé — atelier, magasin, caisse — c'est beaucoup trop : visez 15 à 30 minutes. C'est précisément la situation où une session oubliée donne accès aux données de l'entreprise à quiconque passe.

auth_api_key : une clé par intégration, révocable séparément

Toute intégration — un script, un système tiers, un connecteur — doit s'authentifier. Le réflexe est d'utiliser le mot de passe d'un utilisateur, souvent un compte administrateur, souvent partagé entre plusieurs intégrations.

auth_api_key remplace cela par une clé secrète transmise dans l'en-tête HTTP API-KEY, pour les routes Odoo configurées avec auth='api_key'.

Mot de passe utilisateurauth_api_key
Révocation d'une seule intégrationImpossible sans casser les autresOui, clé par clé
TraçabilitéToutes les intégrations sont « admin »Chaque clé a son utilisateur
Utilisateur archivéL'accès tombeLa clé peut rester active, selon paramétrage
AdministrationDisperséeÉcran central

La troisième ligne est la différence avec le mécanisme natif des clés API d'Odoo (res.users.apikey) : ici, la clé peut survivre à l'archivage de l'utilisateur associé, ce qui évite qu'un départ casse une intégration de production — à condition que ce soit un choix conscient.

Écran central des clés d'API d'authentification : une clé par intégration, avec son utilisateur associé
Écran central des clés d'API d'authentification : une clé par intégration, avec son utilisateur associé

Le module ajoute un menu : Paramètres ▸ Technique ▸ Clé API d'authentification. Une clé par intégration, nommée d'après son usage — pas « clé 1 » et « clé 2 ».

Limites connues

Deux limites répertoriées sur auth_oidc, toutes deux des manques de confort plutôt que des défauts :

  • Pas de connexion directe : à l'arrivée sur l'écran de connexion, le module ne vérifie pas l'existence d'un jeton valide pour connecter l'utilisateur sans cliquer sur le lien d'authentification unique.
  • Pas de déconnexion du fournisseur : une option supplémentaire pour se déconnecter aussi côté fournisseur d'identité est souhaitée mais absente. Le champ End Session URL permet d'y pourvoir partiellement.

Trois limites d'usage à connaître avant de déployer :

  • python-jose est une dépendance serveur, pas un module Odoo. Elle doit être présente avant l'installation.
  • L'expiration de session se règle hors interface, dans un paramètre système : documentez le délai retenu, sinon personne ne saura pourquoi les utilisateurs sont déconnectés.
  • Une clé d'API est un secret. Elle vaut un mot de passe, et une clé lisible dans un dépôt de code vaut un mot de passe publié.

Voir les six mesures de sécurité qui comptent dans une PME et les droits utilisateurs dans Odoo.

Identité technique

ModuleDépôt OCAVersionLicence
auth_oidcserver-auth18.0.1.1.0AGPL-3
auth_session_timeoutserver-auth—AGPL-3
auth_api_keyserver-auth18.0.1.0.2LGPL-3

Les trois font partie de notre socle commun. Le dépôt server-auth compte 26 modules documentés au total.

Questions fréquentes

Quel est le meilleur rapport effort / effet sur la sécurité d'Odoo ?

L'authentification unique avec auth_oidc. Elle règle le risque le plus concret d'une PME — les comptes d'anciens salariés restés actifs — parce que désactiver le compte dans l'annuaire d'entreprise coupe l'accès à Odoo. Il n'y a plus de geste à ne pas oublier.

Quelle dépendance faut-il installer pour auth_oidc ?

La bibliothèque Python python-jose, déclarée dans le manifeste du module et indispensable au décodage et à la vérification des jetons OpenID Connect. Attention à ne pas la confondre avec le paquet PyPI nommé jose, qui est un projet différent — c'est une erreur d'installation classique.

Où se règle le délai d'expiration des sessions ?

Dans un paramètre système : Paramètres ▸ Technique ▸ Paramètres ▸ Paramètres système, clé inactive_session_time_out_delay, en secondes. La valeur par défaut est 7 200, soit deux heures. Sur un poste partagé — atelier, magasin, caisse — visez plutôt 15 à 30 minutes.

Pourquoi ne pas utiliser le mot de passe d'un utilisateur pour mes intégrations ?

Parce qu'une seule intégration compromise oblige à changer le mot de passe, donc à casser toutes les autres. Avec auth_api_key, chaque intégration a sa clé, révocable séparément, et l'écran central montre qui a accès à quoi.

auth_oidc fonctionne-t-il avec autre chose qu'Azure AD ?

Oui, avec tout fournisseur compatible OpenID Connect — Keycloak par exemple. Deux fournisseurs Azure AD sont simplement préconfigurés et désactivés par défaut, pour faire gagner du temps sur le cas le plus courant. Pour un autre fournisseur, il faut renseigner les URL de jeton et de clés JWKS à la main.

Se faire accompagner

L'authentification unique est le chantier le plus rentable de cette fiche, et le seul qui demande une coordination : il touche votre annuaire d'entreprise, la configuration de l'application côté fournisseur, et une dépendance Python sur le serveur.

Nous le mettons en place de bout en bout — application côté fournisseur, dépendance serveur, mappage des claims, et le réglage du délai de session adapté à vos postes partagés. Voir les prestations d'Atalios Consulting ou demander un rappel.

Pour aller plus loin

En résumé

Trois portes, trois modules : l'annuaire d'entreprise pour les comptes, un délai pour les sessions oubliées, une clé par intégration. Deux pièges — la dépendance python-jose à ne pas confondre avec jose, et un délai de session par défaut de deux heures, beaucoup trop long sur un poste partagé. Parlons de vos accès.

Documentation OCASécuritéOdoo

Partager

Fiches connexes

Relevés bancaires et pièces comptables sur un bureau
Relevé sur une instance Odoo 18 Community, le module OCA `account_reconcile_oca` (dépôt `account-reconcile`, version 18.0.1.1.14, licence AGPL-3) ajoute 2 modèles, 87 champs et 17 vues : il remplace le lettrage limité de la Community par deux écrans dédiés, bancaire et par compte. Ce qu'il ajoute à l'instance, où le trouver, ses quatre cas d'usage et ses limites connues.
Lire la suite
Documentation OCA, Comptabilité
Relevé bancaire et suivi des opérations sur un bureau
Odoo a retiré l'import de relevés bancaires de son édition Community à partir de la version 14 : les 3 modules OCA `account_statement_import_file` (18.0.1.0.3, LGPL-3), `_camt` et `_ofx` le rétablissent, avec la détection des transactions déjà importées. Comment ils s'articulent, ce que CAMT apporte de plus qu'OFX, et le piège du fichier sans IBAN.
Lire la suite
Documentation OCA, Comptabilité