# Introduction

`Zend_OpenId` est le composant de Zend Framework qui propose une API simple pour l'utilisation de la technologie OpenID dans son applicatif internet.

## Qu'est ce qu'OpenID ?

OpenID est un ensemble de protocole permettant une gestion centralisée de l'identification d'une personne. Ces protocoles permettent la création d'une identité en ligne, via un fournisseur d'identité. Cette identité peut alors être utilisée n'importe où, où OpenID est supporté. Sur les sites utilisant OpenID, il n'est plus nécessaire de se souvenir d'identifiants différents, la seule et unique identité OpenID est la même partout. Une identité OpenID est en général matérialisée par une URL et un utilisateur est libre de choisir son fournisseur OpenID, ou alors même de créer son propre serveur d'identification OpenID, ceci ne nécessitant pas d'autorisation centrale.

Visitez donc le site officiel de OpenID pour plus d'information, voyez aussi le OpenID Book, par Rafeeq Rehman ou OpenIDFrance.

## Comment cela fonctionne-t-il ?

Le but de `Zend_OpenId` est d'implémenter le protocole d'identification OpenID, comme décrit dans le diagramme suivant :

1. L'authentification est initialisée par l'utilisateur final, qui passe son identifiant OpenID, via son navigateur.

2. Le service protégé par OpenID normalise l'identifiant de l'utilisateur. Il en résulte un identifiant validé, une URL du serveur OpenID, et une version du protocole OpenID.

3. Le service protégé par OpenID établit optionnellement une connexion avec le serveur OpenID en utilisant des clés Diffie-Hellman. Les deux parties partagent alors un "secret" utilisé pour signer et vérifier les messages suivants.

4. Le service protégé par OpenID redirige le navigateur vers l'URL du serveur OpenID, en effectuant une requête d'authentification.

5. Le serveur OpenID vérifie si le navigateur n'est pas déjà identifié.

6. L'utilisateur entre son mot de passe.

7. Le serveur OpenID effectue une vérification pour savoir si l'utilisateur a le droit d'accéder au service protégé par OpenID.

8. L'utilisateur final accepte alors ou non de partager ses informations d'identité pour le service protégé par OpenID.

9. Le serveur OpenID redirige le navigateur vers le service protégé par OpenID, avec un message "authentification approuvée" ou "échouée".

10. Le service protégé par OpenID vérifie l'information du serveur OpenID en utilisant le "secret" obtenu étape 3 ou en envoyant des informations supplémentaires.

## Zend_OpenId Structure

`Zend_OpenId` contient deux sous-classes. `Zend_OpenId_Consumer` est un client, il sera utilisé sur les sites nécessitant l'identification OpenID. `Zend_OpenId_Provider`, elle, permet de créer son propre serveur OpenID. Ces deux classes sont totalement indépendantes l'une de l'autre.

Les seuls points communs entre ces deux classes sont l'extension Simple Registration Extension, implémentée par la classe `Zend_OpenId_Extension_Sreg`, ainsi que les fonctions utilitaires présentes dans la classe `Zend_OpenId`.

`Zend_OpenId` utilise l'extension GMP, lorsqu'elle est disponible. Activez cette extension si possible, ceci améliorera les performances avec `Zend_OpenId`.

## Standards OpenID supportés

Le composant `Zend_OpenId` est conforme aux standards suivants :

- OpenID Authentication protocol version 1.1

- OpenID Authentication protocol version 2.0 draft 11

- OpenID Simple Registration Extension version 1.0

- OpenID Simple Registration Extension version 1.1 draft 1