| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <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 <acronym>PHP</acronym> 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 <acronym>PHP</acronym> devrait fournir un lien <acronym>URL</acronym> vers le service
- d'authentification de Google. La méthode statique
- <methodname>Zend_Gdata_AuthSub::getAuthSubTokenUri()</methodname> 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 <acronym>URL</acronym>, 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 <constant>GET</constant> 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
- <methodname>Zend_Gdata_AuthSub::getHttpClient()</methodname>. 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 <acronym>PHP</acronym> qui effectue une authentification afin
- d'utiliser le service Google Calendar. Elle crée un objet client
- <classname>Zend_Gdata</classname> utilisant le client <acronym>HTTP</acronym> fraîchement
- authentifié.
- </para>
- <programlisting language="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 <methodname>Zend_Gdata_AuthSub::AuthSubRevokeToken()</methodname>. Autrement, le
- jeton reste valide un certain temps.
- </para>
- <programlisting language="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 <varname>$php_self</varname> 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 <acronym>HTTP</acronym>.
- </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>
|