Zend_Gdata_AuthSub.xml 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <!-- EN-Revision: 13842 -->
  2. <sect1 id="zend.gdata.authsub">
  3. <title>Authentification par procédé AuthSub</title>
  4. <para>Le mécanisme d'authentification AuthSub permet d'écrire des applications dans lesquelles il n'est pas
  5. nécessaire de coder "en dur" des identifiants. L'application demande ces informations à l'utilisateur, pour ouvrir
  6. un session de travail.</para>
  7. <para>Voyez <ulink
  8. url="http://code.google.com/apis/accounts/AuthForWebApps.html">http://code.google.com/apis/accounts/AuthForWebApps.html</ulink>
  9. pour plus d'informations sur l'authentification AuthSub de Google Data.</para>
  10. <para>La documentation Google indique que le mécanisme ClientLogin est approprié dans le cas d'applications
  11. embarquées, à la différence du mécanisme AuthSub, utilisé pour les applications Web ayant recours à une
  12. authentification extérieure. AuthSub récupère des identifiant d'un utilisateur de l'application Web, et un
  13. navigateur réagissant aux redirections est requis. Le processus ClientLogin, lui, utilise du code PHP tel qu'écrit
  14. dans l'application elle-même. L'utilisateur de l'application n'entre pas en jeu pour fournir des identifiants de
  15. manière interactive.</para>
  16. <para>Les identifiants utilisés par le processus AuthSub sont fournis par l'utilisateur de l'application, et non par
  17. l'application elle-même.</para>
  18. <note>
  19. <title>Jetons sécurisés et certificats</title>
  20. <para><classname>Zend_Gdata</classname> ne supporte pas actuellement l'utilisation de jetons sécurisés, car
  21. l'authentification AuthSub ne supporte pas les certificats permettant l'obtention de jetons sécurisés.</para>
  22. </note>
  23. <sect2 id="zend.gdata.authsub.login">
  24. <title>Création d'un client HTTP authentifié avec AuthSub</title>
  25. <para>Votre application PHP devrait fournir un lien URL vers le service d'authentification de Google. La méthode
  26. statique <classname>Zend_Gdata_AuthSub::getAuthSubTokenUri()</classname> permet ceci. Elle prend un argument représentant
  27. l'URL de votre application. De cette manière, le serveur Google pourra générer une réponse menant à une
  28. redirection vers cette URL, une fois l'authentification passée.</para>
  29. <para>Après que le serveur d'authentification de Google ait redirigé le navigateur de l'utilisateur vers votre
  30. application, un paramètre <code>GET</code> est ajouté, il s'agit du <code>jeton</code> d'authentification. Ce
  31. jeton servira à éviter de demander une authentification à chaque requête future.</para>
  32. <para>Ensuite, utilisez le jeton avec un appel à la méthode <classname>Zend_Gdata_AuthSub::getHttpClient()</classname>.
  33. Cette méthode retournera alors un objet de type <classname>Zend_Http_Client</classname>, qui sera peuplé des bons en-têtes
  34. permettant ainsi une utilisation future sans nécessité de ré-authentification.</para>
  35. <para>Ci-dessous un exemple d'une application PHP qui effectue une authentification afin d'utiliser le service
  36. Google Calendar. Elle crée un objet client <classname>Zend_Gdata</classname> utilisant le client HTTP fraîchement
  37. authentifié.</para>
  38. <programlisting role="php"><![CDATA[
  39. $my_calendar =
  40. 'http://www.google.com/calendar/feeds/default/private/full';
  41. if (!isset($_SESSION['cal_token'])) {
  42. if (isset($_GET['token'])) {
  43. // Vous pouvez convertir le jeton unique en jeton de session.
  44. $session_token =
  45. Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
  46. // Enregistre le jeton de session, dans la session PHP.
  47. $_SESSION['cal_token'] = $session_token;
  48. } else {
  49. // Affiche le lien permettant la génération du jeton unique.
  50. $googleUri = Zend_Gdata_AuthSub::getAuthSubTokenUri(
  51. 'http://'. $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'],
  52. $my_calendar, 0, 1);
  53. echo "Cliquez <a href='$googleUri'>ici</a>"
  54. . " pour autoriser votre application.";
  55. exit();
  56. }
  57. }
  58. // Création d'un client HTTP authentifié
  59. // pour les échanges avec les serveurs Google.
  60. $client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['cal_token']);
  61. // Création d'un objet Gdata utilisant le client HTTP authentifié :
  62. $cal = new Zend_Gdata_Calendar($client);
  63. ]]></programlisting>
  64. </sect2>
  65. <sect2 id="zend.gdata.authsub.logout">
  66. <title>Destruction de l'authentification AuthSub</title>
  67. <para>Pour détruire la validité d'un jeton d'authentification, utilisez la méthode statique
  68. <classname>Zend_Gdata_AuthSub::AuthSubRevokeToken()</classname>. Autrement, le jeton reste valide un certain temps.</para>
  69. <programlisting role="php"><![CDATA[
  70. // construction sécurisée de la valeur.
  71. $php_self = htmlentities(substr($_SERVER['PHP_SELF'],
  72. 0,
  73. strcspn($_SERVER['PHP_SELF'], "\n\r")),
  74. ENT_QUOTES);
  75. if (isset($_GET['logout'])) {
  76. Zend_Gdata_AuthSub::AuthSubRevokeToken($_SESSION['cal_token']);
  77. unset($_SESSION['cal_token']);
  78. header('Location: ' . $php_self);
  79. exit();
  80. }
  81. ]]></programlisting>
  82. <note>
  83. <title>Notes de sécurité</title>
  84. <para>Le traitement effectué pour la variable <code>$php_self</code> dans l'exemple ci-dessus est une règle
  85. de sécurité générale, elle n'est pas spécifique à l'utilisation de <classname>Zend_Gdata</classname>. Vous devriez
  86. systématiquement filtrer le contenu que vous envoyez en tant qu'en-tête HTTP.</para>
  87. <para>Au sujet de la destruction du jeton, elle est recommandée lorsque l'utilisateur en a terminé avec sa
  88. session Google. Même si la possibilité d'interception de ce jeton reste très faible, il s'agit d'une
  89. précaution faisant partie du bon sens et des bonnes pratiques.</para>
  90. </note>
  91. </sect2>
  92. </sect1>