Zend_Gdata_AuthSub.xml 6.6 KB

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