OpenERP : authentification avec OpenID

par Georges Racinet, mis à jour le 11/09/2013

Qu'est-ce que c'est ?

OpenID est un protocole standard de Single sign-on (SSO). Grâce à lui une application comme OpenERP peut remplacer toute sa partie stockage et vérification de mots de passe par une authentification externe, fournie par un provider. Par exemple, les utilisateurs OpenERP peuvent s’authentifier avec leur compte Google.

Les bénéfices sont importants pour l’intégrateur comme pour le client final : pas de politique compliquée de gestion de mots de passe à implémenter dans l’appli, pas de risque de compromettre des mots de passe. Pour peu que le client utilise déjà les services du provider, c’est toute une étape de déploiement (attribution de login et mots de passe) qui est factorisée, ainsi que la gestion de l’évolution de cette base.

OpenID pour OpenERP

Commencer par installer le module auth_openid. La page de login ressemble alors à ceci :

Page d’accueil OpenERP avec les 4 providers OpenID supportés d’office : Google, Google Apps, Launchpad, myopenid.com, et le lien pour revenir à authentification classique (le premier à gauche)

Quoi qu’il arrive l’authentification classique continuera de fonctionner (utile pour le compte admin, notamment).

Il ne reste plus qu’à paramétrer les fiches des utilisateurs en fonction du/des providers souhaités.

Warning

instances de prod avec proxy sortant


Il faut qu’OpenERP puisse faire des requêtes HTTP vers le provider, et ça n’est pas toujours évident quand l'hébergeur n'autorise les connexions sortantes qu'en passant par un proxy.

Pour passer par un proxy, le plus simple est d’utiliser les variables d’environnement standard. Voici un exemple de configuration pour supervisor qui procède ainsi (notez les guillemets doubles et les virgules):

[program:openerp-web]
user = openerp
environment = LOGNAME="openerp",http_proxy="http://IP:PORT",https_proxy="https://IP:PORT"
command = /srv/openerp/current_buildout/bin/gunicorn_openerp
directory = /srv/openerp/current_buildout/bin
priority = 5
redirect_stderr = false

Le minimum à savoir sur les providers

Quel que soit le provider, l’utilisateur est identifié par une URL et une adresse mail. Le contenu de ceux-ci varie suivant le provider, et il faut les connaître.

L’URL est sur un sous-domaine du provider ; quand on la spécifie, on spécifie donc en particulier le provider.

myopenid.com:

l’URL identifie l’utilisateur

exemple : https://gracinet.myopenid.com
et l’adresse mail est vide.

google:
l’URL est la même pour tout le monde:

https://www.google.com/accounts/o8/id
c’est l’adresse mail qui identifie l’utilisateur.

À la première connexion, l’utilisateur passe par une page Google où on lui demande de confirmer l’accès à son adresse mail.

Pour trouver les autres, une méthode consiste à mettre un point de trace pdb ou une ligne de log dans auth_openid/controllers/main.py, pour voir les valeurs de openid_email et openid_url au niveau du message d’erreur:

session['message'] = 'This OpenID identifier is not associated to any active users'

et essayer sans même paramétrer l’utilisateur.

Activer OpenID pour un utilisateur

Dans la vue formulaire, aller sur l’onglet OpenID et remplir les champs OpenID URL et Email selon le provider souhaité. Voir providers pour savoir quel contenu mettre.

Note

bien que l’utilisateur ait le choix du provider sur la mire de login, on voit qu’une fois son compte OpenERP paramétré, il ne pourra utiliser qu’un seul provider.