| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <?xml version="1.0" encoding="utf-8"?>
- <!-- EN-Revision: 15617 -->
- <!-- 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 URI 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>ou une version
- française <ulink url="http://www.openidfrance.fr">OpenIDFrance</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 cette extension 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 :
- <code>authenticate()</code>. 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
- OpenID utilise une authentification sur un serveur externe à l'application, et
- nécessitera donc deux requêtes HTTP. Ainsi
- <classname>Zend_Auth_Adapter_OpenId::authenticate()</classname> 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
- <classname>Zend_Auth_Adapter_OpenId::authenticate()</classname> 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>.
- <classname>Zend_Auth_Adapter_OpenId::authenticate()</classname> est appelée deux fois.
- La première fois juste après avoir envoyé le formulaire, lorsque
- <code>$_POST['openid_action']</code> vaut <code>"login"</code>, et la deuxième fois
- après la redirection du serveur OpenID vers l'application, lorsque
- <code>$_GET['openid_mode']</code> ou <code>$_POST['openid_mode']</code> 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>
|