OpenID

Cette version 1.0 du plugin permet à SPIP d’accepter OpenID comme méthode d’authentification des utilisateurs, ainsi que pour l’inscription des nouveaux visiteurs.

Guide d’utilisation rapide

Installez le plugin et activez-le

Modification du profil
Dans votre profil d’auteur, indiquez votre adresse OpenID dans le champ du même nom repéré par le picto OpenID

Login avec OpenID
Le formulaire de login est enrichi par le plugin. Lorsque vous avez un cookie qui permet a SPIP de se souvenir de votre login, le formulaire n’affiche plus que celui-ci, et un message vous rappelant que vous avez enregistré un OpenID. Il ne vous reste plus qu’à valider.

Si SPIP ne se souvient pas de vous, il vous propose un formulaire avec les deux champs login et mot de passe, mais en précisant que vous pouvez utiliser votre OpenID en lieu et place de votre login.

En fait, comme vous avez enregistré votre OpenID sur votre profil, vous pouvez même vous connecter avec votre seul login, sans indiquer de mot de passe. SPIP essaiera alors automatiquement d’utiliser votre OpenID.

Dans les deux cas, SPIP vous redirige vers votre fournisseur d’adresse OpenID. Il vous reste juste à vous y authentifier et à autoriser le site sur lequel vous voulez utiliser OpenID :

Dans l’exemple ci-dessus, l’utilisateur est déjà logé : le site ne lui demande donc pas son mot de passe, mais si il accepte la demande d’authentification de « fraichdist ». Si il clique sur « Autoriser toujours », à chaque fois qu’il utilisera son OpenID sur le même site, il sera identifié instantanément sans interaction — visible pour l’utilisateur — avec MyOpenID.

Si tout s’est bien passé... vous êtes renvoyé vers SPIP et authentifié !

Notes : l’authentification par identifiant et mot de passe est toujours possible. Sur le formulaire de login, il suffit de cliquer sur [Utiliser un mot de passe]. Ce plugin propose l’utilisation d’OpenID en plus et non à la place des méthodes habituelles.

Inscription avec OpenID
L’inscription des nouveaux utilisateurs directement au moyen de leur adresse OpenID est également rendue possible par le plugin.

Le formulaire d’inscription présente un badge OpenID pour les utilisateurs qui disposent d’une adresse :

En cliquant dessus, le nom et le mot de passe sont remplacés par un seul champ permettant au visiteur d’y saisir son adresse OpenID :

Il est ensuite renvoyé vers son fournisseur OpenID. A son retour, le nom et l’email sont automatiquement remplis si les données renvoyées par le fournisseur le permettent. Dans ce cas, le processus d’inscription se finit par la validation automatique du formulaire. Si il manque des informations, l’utilisateur est invité à complèter le formulaire.

Dans tous les cas, l’adresse OpenID sera enregistrée dans le profil du visiteur, lui permettant de l’utiliser pour s’identifier dans le futur.

Toutefois, afin de vérifier que l’adresse email est bien la propriété du visiteur, la première connexion ne pourra être faites qu’avec le mot de passe envoyé par mail par SPIP, et pas avec l’adresse OpenID.

A propos d’OpenID

OpenID pour l’utilisateur

OpenID (voir http://openid.net/ est un système d’authentification dite « fédérée » ou « décentralisée », c’est à dire qu’il permet à un utilisateur de choisir un « fournisseur d’identité » (en anglais un IDP, Identity Provider) unique. Ensuite, s’il souhaite accéder à un site web compatible OpenID, il lui suffit d’indiquer à ce site le nom de son IDP auquel le site (en anglais RP, Relying Party) déléguera la tâche d’authentifier l’utilisateur. Une explication très claire (mais en anglais) est dispo sur openidenabled.com.

Concrètement, voici à quoi cela correspond comme expérience utilisateur :
-  Alice souhaite s’identifier sur exemple.com. Exemple.com lui propose d’utiliser son OpenID
-  Alice entre son URI OpenID (sous la forme http://alice.myopenid.com) dans le champ de login de exemple.com
-  exemple.com redirige Alice (via son navigateur web) vers myopenid.com
-  Alice indique à myopenid.com si elle accepte de fournir ou non son identité à exemple.com.
-  Alice redirigée vers exemple.com et est maintenant logguée.

Des intérêts multiples pour l’utilisateur

Vous me demanderez « mais à quoi cela peut-il servir ? ».

Hé bien les intérêts sont multiples pour l’utilisateur : tout d’abord, il n’a plus besoin de créer des dizaines de profils sur des dizaines de sites différents, il lui suffit d’avoir un profil unique sur un IDP pour accéder à tout site supportant OpenID. Si on est identifié sur son IDP, on accède immédiatement à tous les sites compatibles sans se réauthentifier, c’est le principe du « Single Sign On ».

Ensuite, cela permet de ne confier ses infos perso (en particulier son mot de passe !) qu’à un seul site auquel on fait confiance : en effet, les sites consommateurs d’OpenID (les RP) ne connaissent que l’OpenID de l’utilisateur, rien de plus, puisque toute l’authentification est déléguée à l’IDP.

Pour élargir le débat, ce type d’authentification décentralisée est ces derniers temps au coeur des discussions sur la nature de l’identité numérique et sa gestion. En effet, ces systèmes ont la particularité d’être, a mon sens pour la première fois, des systèmes de gestion de l’identité qui améliorent la protection de la vie privée, en plaçant l’utilisateur au coeur de la transaction, plutôt que de lui demander de confier à tous ses interlocuteurs des informations personnelles pour tout et n’importe quoi. OpenID (et les autres systèmes de la même famille) permet de choisir à qui l’on fait confiance pour lui donner ses informations d’identité, c’est une amélioration appréciable, ou en d’autres termes, l’inverse de la tendance « Big brother »... .

Pour en savoir plus

Sur les enjeux de l’identité numérique :
-  Identity 2.0 : LA référence sur le sujet, avec des présentations absolument lumineuses de Dick Hardt sur l’identité numérique à l’heure du Web 2.0. Note pour les allergiques au marketing : dépassez votre allergie pour 5 minutes, allez voir par vous-mêmes, çela ouvre des perspectives.
-  OpenID.net : le site qui pointe vers toute la sphère OpenID, un point de passage obligé.
-  MyOpenID.com : si vous voulez vous créer un OpenID, ce site vous en propose, c’est gratuit, c’est parfait pour tester.
-  OpenIDenabled : ensuite, pour développer, ce site est une bonne ressource.

Et le plugin, dans tout cela ?

Un des aspects sympathiques d’OpenID est qu’on peut en général utiliser son propre site web comme identifiant OpenID (oui, un OpenID se présente sous la forme d’un URL, par exemple : http://edouard.lafargue.name/). Les profils utilisateurs de SPIP permettant déjà d’entrer l’adresse de son site web, c’est ce champ qui sera utilisé par le plugin. Comme cela, on évite de surcharger SPIP.

Mécanisme de l’authentification OpenID
Pour faire simple : un site qui souhaite authentifier un utilisateur avec un OpenID récupère l’OpenID en question, et lance l’authentification proprement dite, en redirigeant l’utilisateur vers son IDP, et en fournissant à l’IDP l’adresse de retour sur le site où renvoyer l’utilisateur après authentification réussie (ou non). En option, le site peut demander à l’IDP des informations supplémentaires sur l’utilisateur, comme adresse email, âge, ou toute autre précision. L’IDP demandera alors à l’utilisateur s’il l’autorise à communiquer ces éléments au site ou non. Encore une fois, voir openidenabled pour plus de détails.

Identification dans SPIP
Dans SPIP, la cinématique d’authentification est la suivante : SPIP affiche le formulaire de login, qui fait la demande d’identifiant et de mot de passe.

Après validation, le traitement du formulaire essaye d’identifier l’utilisateur par les différentes méthodes disponibles (par défaut SPIP, puis LDAP). Le plugin ajoute la méthode OPENID qui va se charger de repérer la saisie d’une adresse OpenID, et renvoyer l’utilisateur vers son fournisseur pour lui permettre de s’y identifier.

L’utilisateur revient ensuite sur la page d’origine sur le site SPIP, ou le plugin reprend la main pour finir le processus, et verifier que les données renvoyées par le fournisseur OpenID permettent d’identifier à coup sûr l’auteur SPIP correspondant. Dans ce cas, il est logé automatiquement et envoyé vers sa page de destination.

Discussion

28 discussions

  • 2

    Bonjour,

    SPIP 2.0 RC1 : impossible d’activer le plugin :
    Impossible d’activer le plugin openid
    Ce plugin nécessite la librairie php-openid-2.1.2 à télécharger depuis http://openidenabled.com/files/php-openid/packages/php-openid-2.1.2.zip et à installer dans lib/

    Je n’ai pas un serveur dédié mais un hébergement mtualisé. Comment et où j’installe « ça » ?

    Merci

    Bonne journée,
    Olivier

    • Salut,

      Il suffit de créer un dossier /lib à la racine de ton site et de lui appliquer des droits en 777 pour que SPIP puisse y télécharger les scripts nécessaires. Ainsi un bouton pour lancer le téléchargement sera présent sous le message que tu cites.

      ++

    • Ok impeccable.
      Merci.

      A bientôt

    Répondre à ce message

  • 1

    Erreur avec la version spip1.92 :
    Fatal error : No XML parser was found in c :\program files\easyphp1-8\www\spip192\plugins\openid_192\Services\Yadis\XML.php on line 357

    Une idée ?

    • J’avais mis le message mais pas donné la solution... C’est un pré-requis...

      Extrait de php-openid-2.1.2\README

      INSTALLATION
      ============
      
      [...]
      
         - Install either the DOM or domxml PHP XML processing extension,
           but not both (they are incompatible).

      Voilà il ne reste plus qu’à installer DOM ou domxml et ensuite l’activer (php.ini extension).

    Répondre à ce message

  • 2

    La présentation de la page de login avec SPIP 2.0 ne ressemble pas du tout à l’exemple. Voulu ?

    • Bonjour,

      Je passais par là... donc petit commentaire.

      • Le plugin pour SPIP 1.9.2x est téléchargeable ici : http://files.spip.org/spip-zone/openid_192.zip
      • Le plugin pour SPIP 2.0beta http://files.spip.org/spip-zone/openid.zip() est en partie fonctionnel. Effectivement, le panneau de login de SPIP 2 ayant lui-même évolué (on peut se logguer d’un coup), il est plus difficile d’intégrer openID. Pour l’instant, même l’icone n’apparaît pas, mais c’est surtout le fait que le champ « password » reste qui est perturbateur. Il faut encore creuser un peu.
    • Effectivement, mon propos était nullement critique mais plutôt « informatif ». Ca fonctionne, c’est sûr que l’interface donne une impression étrange.

      Une petite erreur dans le lien pour la version adaptée à SPIP 2.0, voilà le bon : http://files.spip.org/spip-zone/ope...

    Répondre à ce message

  • Fatal error : No XML parser was found in /xxxx/htdocs/lib/php-openid-2.1.2/Auth/Yadis/XML.php on line 366

    Et pourtant............

    Répondre à ce message

  • 1

    J’ai le message suivant :
    Erreur OpenID : Utilisateur inconnu sur ce site

    Alors que le compte que j’utilise est valide sur le site myopenid.com.

    J’ai bien indiqué dans le champ URL de l’auteur, l’identifiant OpenID.
    J’utilise SPIP 1.9.2d avec le plugin récupéré sur http://files.spip.org/spip-zone/ avec comme nom : openid_192.zip.

    J’ai supposé que c’était le bon... Ai-je oublié qq chose ?

    Merci.

    • Je me réponds à moi même, il faut mettre un slash à la fin de l’URL. :(

      Sinon la requete SQL plante, dommage ...

    Répondre à ce message

  • 4

    En fait, on peut passer par l’action cookie orifinal de SPIP. Elle n’est pas surchargeable, mais elle appelle la méthode d’authentification interne de SPIP, qui elle est surchrageable.

    voici un exemple de surcharge possible :

    function inc_auth_spip($login, $pass)
    {
    	if (__est_un_login_OpenId($login))
    	{
    		// verifier ici l'authentification OpenID
    		
    		if (__est_bien_un_login_OpenId_valide_et_authentifier($login))
    		{
    			// chercher l'auteur dans la base
    			$result = spip_query("SELECT id_auteur FROM spip_auteurs WHERE url=" . _q($login) . " AND statut<>'5poubelle'");
    			$row = spip_fetch_array($result);
    			if (!$row) // pas d'auteur correspondant
    			{
    				// on peut le creer automatiquement avec la fonction message_inscription
    				$commentaire = message_inscription($email, $nom, 'redac', 0);
    				// et lui envoyer un message de bienvenue (que l'on peut aussi personnaliser)
    				if (function_exists('envoyer_inscription'))
    					$f = 'envoyer_inscription';
    				else 
    					$f = 'envoyer_inscription_dist';
    				$commentaire = $f($commentaire, $nom, $mode, $id);
    				// et pourquoi pas allez faire des modifs specifiques sur l'auteur
    			}
    			
    			$result = spip_query("SELECT * FROM spip_auteurs WHERE url=$login"); // par exemple
    			$row = spip_fetch_array($result);
    			return $row;
    		}
    		else // pas valide
    		{
    				spip_log("proxy user creation canceled: ".$commentaire);
    				return array();
    		}
    	}
    	else // sinon, methode standard
    	{
    		include_spip('inc/auth_spip');
    		return inc_auth_spip_dist ($login, $pass);
    	}
    }

    A+

    • Peux-tu faire ce changement directement dans le plugin ? S’il est sur la zone, c’est justement fait pour ça :)

    • C’est juste que j’ai pas trop le temps là...

      Ceci dit, j’ai extrait cet exemple d’un plugin que j’ai réalisé pour mettre des SPIP en extranet derrière un serveur unique IIS jouant le role de reverse proxy et validant l’accès sécurisé. Les spips derrières le reverse proxy autenthifient automatiquement l’utilisateur selon les infos fournies par le reverse proxy (c’est bien du SSO - avec sécurité déportée sur un autre système - ici privé) et prennent en compte le fait que leur propre url (celle utilisée par le reverse proxy) est différente de l’url vue de l’utilisateur finale (qui est celle du reverse proxy).

      Si ça peut intéresser quelqu’un, j’en pourrai en faire, quant j’aurai 3 secondes (sic), un plugin documenté, ou au moins une documentation de conception.

      A+,

    • J’avais bien voulu faire les choses comme cela au début, mais en fait, c’est l’action cookie qui dispatche entre les authent LDAP, Base ou autres. Et d’autre part, lors d’une authent OpenID, Spip doit lancer l’authentification dès la saisie du login, avant d’avoir un mot de passe.

      Mais effectivement, il serait bon que Spip puisse supporter l’insertion d’autres méthodes d’authent plus facilement dans son code...

    • Oui, c’est bien l’action cookie qui dispatche entre les différents types d’authentification.
      Dans mon cas (SSO derrière un reverse-proxy qui assure aussi l’authentification), j’ai mis dans le mes_options d’un plugin dédié la surcharge de inc/auth_spip et l’algorithme suivant (qui s’exécute donc à chaque appel de page) :

      if (_on_est_dans_un_cas_valide_d_authentification_automatique)
      {
        if ($auteur_session) // si on a une session spip valide
        {
          if (_la_session_spip_ne_correspond_pas_a_l_authentification) // on ne sait jamais
          {
            $auteur_session = '';
          }
        }
        if (!$auteur_session && !$essai_login) // si on a pas de session spip valide et on n'est pas en train d'en initier une via l'action cookie
        {
          include_spip('action/cookie');
          $url = $_SERVER['HTTP_X_PUBLIC_HOST'].$GLOBALS['REQUEST_URI'];
            // c'est ce qui marche dans mon cas - plus généralement, le code de inc / utils / url_de_base() donne de quoi se débrouiller
          $cible = str_replace('&','&',$url);
          $post = parametre_url(generer_url_action('cookie','essai_login=oui',true),'url',$cible,'&');
          include_spip('inc/headers');
          redirige_par_entete($post);
        }
        elseif ($auteur_session)
        {
          // on est dans une session valide, on peut faire des choses comme initialiser des variables de contexte de session utilisables dans les squelettes pour les particulariser
        }
      }

      Ca doit pouvoir fonctionner aussi pour ton plugin.

      A+,
      LG

    Répondre à ce message

  • pagetronic

    La function maj_tables() a disparu sur la 9.2 dans openid_install.php ligne 15

    auriez vous la fonction de remplacement ? la lib phpopenid est elle à installer aussi ?

    Merci ;)

    Répondre à ce message

  • marabbeh

    Super, j’en révais d’un truc comme ça ! Bon je vais regarder ces infos à fond.

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom