| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- <!-- EN-Revision: 13842 -->
- <sect1 id="zend.gdata.authsub">
- <title>Authentification par procédé AuthSub</title>
- <para>Le mécanisme d'authentification AuthSub permet d'écrire des applications dans lesquelles il n'est pas
- nécessaire de coder "en dur" des identifiants. L'application demande ces informations à l'utilisateur, pour ouvrir
- un session de travail.</para>
- <para>Voyez <ulink
- url="http://code.google.com/apis/accounts/AuthForWebApps.html">http://code.google.com/apis/accounts/AuthForWebApps.html</ulink>
- pour plus d'informations sur l'authentification AuthSub de Google Data.</para>
- <para>La documentation Google indique que le mécanisme ClientLogin est approprié dans le cas d'applications
- embarquées, à la différence du mécanisme AuthSub, utilisé pour les applications Web ayant recours à une
- authentification extérieure. AuthSub récupère des identifiant d'un utilisateur de l'application Web, et un
- navigateur réagissant aux redirections est requis. Le processus ClientLogin, lui, utilise du code PHP tel qu'écrit
- dans l'application elle-même. L'utilisateur de l'application n'entre pas en jeu pour fournir des identifiants de
- manière interactive.</para>
- <para>Les identifiants utilisés par le processus AuthSub sont fournis par l'utilisateur de l'application, et non par
- l'application elle-même.</para>
- <note>
- <title>Jetons sécurisés et certificats</title>
- <para><classname>Zend_Gdata</classname> ne supporte pas actuellement l'utilisation de jetons sécurisés, car
- l'authentification AuthSub ne supporte pas les certificats permettant l'obtention de jetons sécurisés.</para>
- </note>
- <sect2 id="zend.gdata.authsub.login">
- <title>Création d'un client HTTP authentifié avec AuthSub</title>
- <para>Votre application PHP devrait fournir un lien URL vers le service d'authentification de Google. La méthode
- statique <classname>Zend_Gdata_AuthSub::getAuthSubTokenUri()</classname> permet ceci. Elle prend un argument représentant
- l'URL de votre application. De cette manière, le serveur Google pourra générer une réponse menant à une
- redirection vers cette URL, une fois l'authentification passée.</para>
- <para>Après que le serveur d'authentification de Google ait redirigé le navigateur de l'utilisateur vers votre
- application, un paramètre <code>GET</code> est ajouté, il s'agit du <code>jeton</code> d'authentification. Ce
- jeton servira à éviter de demander une authentification à chaque requête future.</para>
- <para>Ensuite, utilisez le jeton avec un appel à la méthode <classname>Zend_Gdata_AuthSub::getHttpClient()</classname>.
- Cette méthode retournera alors un objet de type <classname>Zend_Http_Client</classname>, qui sera peuplé des bons en-têtes
- permettant ainsi une utilisation future sans nécessité de ré-authentification.</para>
- <para>Ci-dessous un exemple d'une application PHP qui effectue une authentification afin d'utiliser le service
- Google Calendar. Elle crée un objet client <classname>Zend_Gdata</classname> utilisant le client HTTP fraîchement
- authentifié.</para>
- <programlisting role="php"><![CDATA[
- $my_calendar =
- 'http://www.google.com/calendar/feeds/default/private/full';
- if (!isset($_SESSION['cal_token'])) {
- if (isset($_GET['token'])) {
- // Vous pouvez convertir le jeton unique en jeton de session.
- $session_token =
- Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
- // Enregistre le jeton de session, dans la session PHP.
- $_SESSION['cal_token'] = $session_token;
- } else {
- // Affiche le lien permettant la génération du jeton unique.
- $googleUri = Zend_Gdata_AuthSub::getAuthSubTokenUri(
- 'http://'. $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'],
- $my_calendar, 0, 1);
- echo "Cliquez <a href='$googleUri'>ici</a>"
- . " pour autoriser votre application.";
- exit();
- }
- }
- // Création d'un client HTTP authentifié
- // pour les échanges avec les serveurs Google.
- $client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['cal_token']);
- // Création d'un objet Gdata utilisant le client HTTP authentifié :
- $cal = new Zend_Gdata_Calendar($client);
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.gdata.authsub.logout">
- <title>Destruction de l'authentification AuthSub</title>
- <para>Pour détruire la validité d'un jeton d'authentification, utilisez la méthode statique
- <classname>Zend_Gdata_AuthSub::AuthSubRevokeToken()</classname>. Autrement, le jeton reste valide un certain temps.</para>
- <programlisting role="php"><![CDATA[
- // construction sécurisée de la valeur.
- $php_self = htmlentities(substr($_SERVER['PHP_SELF'],
- 0,
- strcspn($_SERVER['PHP_SELF'], "\n\r")),
- ENT_QUOTES);
- if (isset($_GET['logout'])) {
- Zend_Gdata_AuthSub::AuthSubRevokeToken($_SESSION['cal_token']);
- unset($_SESSION['cal_token']);
- header('Location: ' . $php_self);
- exit();
- }
- ]]></programlisting>
- <note>
- <title>Notes de sécurité</title>
- <para>Le traitement effectué pour la variable <code>$php_self</code> dans l'exemple ci-dessus est une règle
- de sécurité générale, elle n'est pas spécifique à l'utilisation de <classname>Zend_Gdata</classname>. Vous devriez
- systématiquement filtrer le contenu que vous envoyez en tant qu'en-tête HTTP.</para>
- <para>Au sujet de la destruction du jeton, elle est recommandée lorsque l'utilisateur en a terminé avec sa
- session Google. Même si la possibilité d'interception de ce jeton reste très faible, il s'agit d'une
- précaution faisant partie du bon sens et des bonnes pratiques.</para>
- </note>
- </sect2>
- </sect1>
|