# OpenID

OpenID est un système d’authentification décentralisé qui permet l’authentification unique, ainsi que le partage d’attributs. Il permet à un utilisateur de s’authentifier auprès de plusieurs sites (devant prendre en charge cette technologie) sans avoir à retenir un identifiant pour chacun d’eux mais en utilisant à chaque fois un unique identifiant OpenID. Le modèle se base sur des liens de confiance préalablement établis entre les fournisseurs de services et les fournisseurs d’identité (OpenID providers). Il permet aussi d’éviter de remplir à chaque fois un nouveau formulaire en réutilisant les informations déjà disponibles. Ce système permet à un utilisateur d'utiliser un mécanisme d'authentification forte.

## Adoption

OpenID est adopté par Yahoo (17 janvier 2008), MySpace (23 juillet 2008), Dailymotion (du 24 décembre 2008 au 30 juin 2011), Facebook (18 mai 2009), et par le gouvernement américain pour l'administration en ligne (9 septembre 2009).
Le 7 février 2008, la fondation OpenID a annoncé qu’IBM, Microsoft, Google, Yahoo et Verisign rejoignaient son conseil d’administration.
Le 28 octobre 2008, la société Microsoft a annoncé une nouvelle plate-forme — de nom de code « Geneva » — qui permet de se reposer sur le mécanisme OpenID.
OpenID permet, à partir de 2010, aux utilisateurs munis d'un compte Yahoo de se connecter à un compte Google pour utiliser ses services en ligne via la Yahoo OpenID API. Il s'agit du premier cas d'intégration d'OpenID par Google. À partir de 2011, alors qu'OpenID est utilisé par 50 000 sites internet, le service commence à être sévèrement critiqué, comparé à un standard vulnérable tel que XML ou atom. L'abandon du service par 37Signals est symbolique. L'arrivée en puissance de Facebook Connect (avec lequel les données utilisateur sont partagées) contribue à la perte de vitesse d'OpenID. OpenID réagit avec le lancement d'OpenID Connect, mais cela ne lui a pas permis de revenir dans la course.

### La Fondation OpenID (OIDF)

La Fondation OpenID (OIDF aux États-Unis) gère et organise l’ensemble de la communauté OpenID. Il s’agit d’une « organisation à but non lucratif » créée en juin 2007, basée dans l’Oregon et constituée d’un conseil de direction de 8 membres. En 2021, son président est Nat Sakimura.

#### Entreprises

Depuis sa création de nombreuses entreprises ont rejoint la fondation :
* Google
* IBM (jusqu'en 2017)
* Facebook (jusqu'en 2017)
* Yahoo (jusqu'en 2016)
* Microsoft
* Verizon
* eBay
* Verisign (jusqu'en 2017)
* NEC
* Orange
* AKAMAI
* KDDI

#### Autres Fondations

* Belgique : OpenID Belgique
Il s’agit d’une organisation internationale à but non lucratif (AISBL, Association Internationale Sans But Lucratif, selon la loi belge) dont la mission est de soutenir et d’organiser le développement du modèle OpenID en Belgique et partout en Europe.
* Suisse : OpenID Switzerland
OpenID Switzerland, fondée le 9 avril 2008 à Zurich, est une association à but non lucratif.
* membres dirigeants : Robert Ott (Vice-president) et David Reindl (Secretary)
* représentants : Robert Ott (Swiss German Area Delegate), Sylvain Maret (Swiss French Area Delegate) et Andrea Chiodoni (Svizzera di Lingua Italiana)

### Propriété intellectuelle

En France, la marque OpenID est protégée à l’INPI sous le n$^o$ National EM005796412.

## Fonctionnement
### Acteurs

Le fonctionnement du protocole OpenID distingue plusieurs acteurs.
* L’utilisateur est la personne qui — par le biais d’un logiciel client comme un navigateur web — souhaite s’identifier à un service.
* Le fournisseur de service (en abrégé, RP, pour Relying Party) exige une preuve de l’identité de l’utilisateur. C’est un site web, un service web…
* Le fournisseur d’identité (OpenID Provider, ou OP, ou IdP, ou IP ou juste provider) est un serveur d’authentification OpenID qui est contacté par le service pour obtenir une preuve de l’identité de l’utilisateur.

### Création d’un compte

Chaque utilisateur est identifié par une URI, qu’il acquiert auprès de son fournisseur d’identité OpenID. Le mode de fonctionnement est le suivant :
* L’utilisateur choisit un fournisseur d’identité, par exemple VeriSign (nom du serveur : pip.verisignlabs.com).
* L’utilisateur choisit un nom d’utilisateur (x pour l’exemple), un mot de passe, et crée son compte. L’utilisateur peut renseigner certaines informations le concernant. Ce compte aura pour identifiant OpenID x.pip.verisignlabs.com. Le profil de l’utilisateur est également disponible à cette adresse.

### Utilisation d’un compte

Le mode de fonctionnement est le suivant :
* L’utilisateur x désire, par exemple, accéder au service UnServiceWeb qui requiert que l’utilisateur soit authentifié.
* L’utilisateur entre son identifiant : x.sous.domaine.com.
* Le fournisseur de service (UnServiceWeb dans notre cas) contacte le fournisseur d'identité et ils créent ensemble un secret partagé.
* L’utilisateur est redirigé vers le site du fournisseur d'identité et entre son mot de passe pour s’authentifier.
* L’utilisateur est alors averti que UnServiceWeb souhaite avoir accès à certains attributs de son profil OpenID (par exemple, son nom, prénom, et son adresse de courriel), et accepte ou non cette demande.
* L’utilisateur est redirigé vers le fournisseur de service avec une preuve cryptographique de son identité (créée grâce au secret partagé préalablement établi) fournie par le fournisseur d'identité et est authentifié.
Tant que la session de l’utilisateur est active, il pourra être reconnu automatiquement sur les autres sites utilisant OpenID grâce au mécanisme de l’authentification unique.

## Implémentation
### Clients OpenID

* Java : OpenID4Java
* .NET : DotNetOpenAuth (client et serveur)
* Perl : Net::OpenID::Consumer
* PHP : OpenID library
* Python : OpenID library (ainsi que plone.openid pour Zope)
* Ruby : OpenID library

### Extensions OpenID pour les serveurs web

* Java : NetMeshInfoGrid LID
* NET : DotNetOpenAuth (client et serveur)
* Perl : Net::OpenID::Server
* PHP : openid, NetMeshInfoGrid LID, phpMyID, Clamshell, SimpleID
* Python : DjangoID, PyBlosxom
* Ruby : HeraldryPIP
* Apache : HTTPD Apache Mod_OpenID
* Node.js : oidc-provider

### Fournisseur d'identité - IDP

Une liste de serveurs permettant de créer un compte OpenID se trouve sur le wiki d’OpenID. Parmi ceux-ci :
* GetMyOpenID.com
* GetOpenID.com (arrêté le 30 juin 2011)
* Google (qui cependant n'accepte plus OpenID 2.0, pourtant encore utilisé par nombre de sites ; Google demande de changer de fournisseur ou d’adopter un protocole plus sécurisé supportant l'authentification en deux étapes de type OTP : OpenID 2.0 doit être remplacé par OpenID Connect mais Google ne fournit plus cette identité lui-même)
* Launchpad et Ubuntu (services fusionnés avec une identification unique)
* MyID.net (arrêté en 2013)
* openid.labsfr.fr
* Orange
* OpenIdissimo
* VeriSign
* Yahoo

### Sécurité des identités numériques

OpenID peut être couplé à un système d'authentification forte. Cela assure une meilleure protection contre l'usurpation d’identité numérique.

## Critiques

Le système OpenID permet de se connecter à un service A avec un compte B, mais pas de se créer un compte au service A avec un compte B. Par exemple, Google laisse les utilisateurs se connecter à ses services avec un compte Yahoo, mais ne crée pas d'identifiants et de compte central Google pour ces utilisateurs externes. Pour certains propriétaires de sites, cela signifie que des utilisateurs quasi-anonymes peuvent utiliser leurs sites via OpenID.
La fiabilité du service a également été remise en question au niveau du besoin de fournir un mot-de-passe d'un compte sur un site tierce. Par exemple, lorsqu'un utilisateur Yahoo veut se connecter à Google, c'est Google qui prend en charge l'ouverture du formulaire de connexion à Yahoo. Ce scénario peut mener à de nombreuses dérives par hameçonnage.
En 2014, un développeur découvre une faille de sécurité qui permet d'envoyer du code arbitraire sur les serveurs de Facebook en manipulant la fonctionnalité de connexion OpenID.