| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- <?xml version="1.0" encoding="utf-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.auth.adapter.openid">
- <title>Authentification OpenID</title>
- <sect2 id="zend.auth.adapter.openid.introduction">
- <title>Introduction</title>
- <para>
- <classname>Zend_Auth_Adapter_OpenId</classname> permet l'authentification à travers un
- serveur distant OpenID. Une telle authentification attend que l'utilisateur fournisse à
- l'application Web son identifiant OpenID. L'utilisateur est alors redirigé vers un
- fournisseur de services OpenID, afin de s'identifier en rapport avec l'application Web
- utilisée. Un mot de passe ou un autre procédé est utilisé, et celui-ci n'est jamais
- connu de l'application Web originale.
- </para>
- <para>
- L'identité OpenID est juste une <acronym>URI</acronym> qui pointe vers une page avec des
- informations décrivant le serveur à utiliser et des informations sur l'utilisateur.
- Pour plus d'informations, consultez
- <ulink url="http://www.openid.net/">le site officiel OpenID</ulink>.
- </para>
- <para>
- La classe <classname>Zend_Auth_Adapter_OpenId</classname> utilise
- <classname>Zend_OpenId_Consumer</classname> qui sert à gérer le protocole OpenID.
- </para>
- <note>
- <para>
- <classname>Zend_OpenId</classname> utilise
- <ulink url="http://www.php.net/manual/fr/ref.gmp.php">l'extension GMP</ulink>, si
- disponible. L'utilisation de l'extension <acronym>GMP</acronym> est recommandée pour
- améliorer les performances de <classname>Zend_Auth_Adapter_OpenId</classname>.
- </para>
- </note>
- </sect2>
- <sect2 id="zend.auth.adapter.openid.specifics">
- <title>Spécifications</title>
- <para>
- Comme toute autre classe adaptateur de <classname>Zend_Auth</classname>,
- <classname>Zend_Auth_Adapter_OpenId</classname> implémente
- <classname>Zend_Auth_Adapter_Interface</classname>, qui définit une seule méthode :
- <methodname>authenticate()</methodname>. Elle est utilisée pour l'authentification
- elle-même, une fois que l'objet est prêt. La préparation d'un objet OpenID nécessite
- quelques options à passer à <classname>Zend_OpenId</classname>.
- </para>
- <para>
- A la différence des autres adaptateurs <classname>Zend_Auth</classname>, l'adaptateur
- <classname>Zend_Auth_Adapter_OpenId</classname> utilise une authentification sur un
- serveur externe à l'application, et nécessitera donc deux requêtes
- <acronym>HTTP</acronym>. Ainsi
- <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname> devra être appelée
- deux fois : d'abord pour rediriger l'utilisateur vers le serveur OpenID (rien ne
- sera donc retourné par la méthode), qui lui-même redirigera l'utilisateur vers
- l'application, où un deuxième appel de méthode
- <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname> vérifiera la signature
- et complétera le processus. Un objet <classname>Zend_Auth_Result</classname> sera alors
- cette fois-ci retourné.
- </para>
- <para>
- L'exemple suivant montre l'utilisation de
- <classname>Zend_Auth_Adapter_OpenId</classname>.
- <methodname>Zend_Auth_Adapter_OpenId::authenticate()</methodname> est appelée deux fois.
- La première fois juste après avoir envoyé le formulaire <acronym>HTML</acronym>, lorsque
- <varname>$_POST['openid_action']</varname> vaut <emphasis>"login"</emphasis>, et la
- deuxième fois après la redirection <acronym>HTTP</acronym> du serveur OpenID vers
- l'application, lorsque <varname>$_GET['openid_mode']</varname> ou
- <varname>$_POST['openid_mode']</varname> existe.
- </para>
- <programlisting language="php"><![CDATA[
- <?php
- $status = "";
- $auth = Zend_Auth::getInstance();
- if ((isset($_POST['openid_action']) &&
- $_POST['openid_action'] == "login" &&
- !empty($_POST['openid_identifier'])) ||
- isset($_GET['openid_mode']) ||
- isset($_POST['openid_mode'])) {
- $result = $auth->authenticate(
- new Zend_Auth_Adapter_OpenId(@$_POST['openid_identifier']));
- if ($result->isValid()) {
- $status = "You are logged-in as "
- . $auth->getIdentity()
- . "<br>\n";
- } else {
- $auth->clearIdentity();
- foreach ($result->getMessages() as $message) {
- $status .= "$message<br>\n";
- }
- }
- } else if ($auth->hasIdentity()) {
- if (isset($_POST['openid_action']) &&
- $_POST['openid_action'] == "logout") {
- $auth->clearIdentity();
- } else {
- $status = "You are logged-in as "
- . $auth->getIdentity()
- . "<br>\n";
- }
- }
- ?>
- <html><body>
- <?php echo htmlspecialchars($status);?>
- <form method="post"><fieldset>
- <legend>OpenID Login</legend>
- <input type="text" name="openid_identifier" value="">
- <input type="submit" name="openid_action" value="login">
- <input type="submit" name="openid_action" value="logout">
- </fieldset></form></body></html>
- ]]></programlisting>
- <para>
- Il est possible de personnaliser le processus, pour par exemple demander une
- redirection du serveur OpenID vers l'application, sur une page différente de la
- première. Ceci peut être fait avec des objets personnalisés
- <classname>Zend_OpenId_Consumer_Storage</classname> ou
- <classname>Zend_Controller_Response</classname>. Vous pouvez aussi utiliser le procédé
- "Simple Registration" pour récupérer les informations au sujet de l'utilisateur, en
- provenance du serveur OpenID. Toutes ces possibilités sont écrites et détaillées dans
- le chapitre concernant <classname>Zend_OpenId_Consumer</classname>.
- </para>
- </sect2>
- </sect1>
|