Zend_Gdata_AuthSub.xml 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: 24249 -->
  4. <sect1 id="zend.gdata.authsub">
  5. <title>Authentifizierung mit AuthSub</title>
  6. <para>
  7. Der AuthSub Mechanismum erlaubt es Webanwendungen zu schreiben, die einen authentifizierten
  8. Zugang zu Google Data Services benötigen, ohne dass Code geschrieben werden muß, der
  9. Benutzerzugangsdaten behandelt.
  10. </para>
  11. <para>
  12. Siehe <ulink
  13. url="http://code.google.com/apis/accounts/AuthForWebApps.html">http://code.google.com/apis/accounts/AuthForWebApps.html</ulink>
  14. für weitere Informationen über Google Data AuthSub Authentifizierung.
  15. </para>
  16. <para>
  17. Die Google Dokumentation sagt, dass der ClientLogin Mechanismum ausreichend für "installierte
  18. Anwendungen" ist, und der AuthSub Mechanismum für "Webanwendungen". Der Unterschied ist das
  19. AuthSub Interaktion vom Benutzer benötigt, und ein Browser Interface, das auf
  20. Umleitungsanfragen reagieren kann. Die ClientLogin Lösung verwendet <acronym>PHP</acronym>
  21. Code um die Benutzerzugangsdaten anzubieten; der Benutzer wird nicht benötigt, um seine
  22. Zugangsdaten einzugeben.
  23. </para>
  24. <para>
  25. Die Zugangsdaten, die über den AuthSub Mechanismum bereitgestellt werden, werden vom Benutzer
  26. über die Webanwendung eingegeben. Deswegen müssen es Zugangsdaten sein, die dem Benutzer
  27. bekannt sind.
  28. </para>
  29. <note>
  30. <title>Registrierte Anwendungen</title>
  31. <para>
  32. <classname>Zend_Gdata</classname> unterstützt aktuell die Verwendung von sicheren Tokens
  33. nicht, weil die AuthSub Authentifizierung die Übergabe von digitalen Zertifikaten, um
  34. ein sicheres Token zu erhalten, nicht unterstützt.
  35. </para>
  36. </note>
  37. <sect2 id="zend.gdata.authsub.login">
  38. <title>Einen AuthSub authentifizierten Http Clienten erstellen</title>
  39. <para>
  40. Die <acronym>PHP</acronym>-Anwendung sollte einen Hyperlink zur Google
  41. <acronym>URL</acronym> bieten, welche die Authentifizierung durchführt. Die statische
  42. Funktion <methodname>Zend_Gdata_AuthSub::getAuthSubTokenUri()</methodname> liefert die
  43. richtige <acronym>URL</acronym>. Die Argumente dieser Funktion inkludieren die
  44. <acronym>URL</acronym> zur eigenen <acronym>PHP</acronym>-Anwendung, so dass Google den
  45. Browser des Benutzers zur eigenen Anwendung zurückleiten kann, nachdem die
  46. Benutzerdaten verifiziert wurden.
  47. </para>
  48. <para>
  49. Nachdem Googles Authentifizierungsserver den Browser des Benutzers zur aktuellen
  50. Anwendung umgeleitet haben, wird ein <constant>GET</constant> Anfrageparameter gesetzt,
  51. der <emphasis>token</emphasis> heißt. Der Wert dieses Parameters ist ein
  52. einmal verwendbarer Token, der für authentifizierten Zugriff verwendet werden kann.
  53. Dieser Token kann in einen mehrfach verwendbaren Token konvertiert und in der eigenen
  54. Session gespeichert werden.
  55. </para>
  56. <para>
  57. Um den Token dann zu verwenden, muß
  58. <methodname>Zend_Gdata_AuthSub::getHttpClient()</methodname> aufgerufen werden. Diese
  59. Funktion gibt eine Instanz von <classname>Zend_Http_Client</classname> zurück mit
  60. gültigen Headern gesetzt, so dass eine nachfolgende Anfrage der Anwendung, die diesen
  61. <acronym>HTTP</acronym> Clienten verwenden, auch authentifiziert sind.
  62. </para>
  63. <para>
  64. Nachfolgend ist ein Beispiel von <acronym>PHP</acronym> Code für eine Webanwendung um
  65. eine Authentifizierung zu erlangen, damit der Google Calender Service verwendet werden
  66. kann, und der ein <classname>Zend_Gdata</classname> Client Objekt erstellt, das diesen
  67. authentifizierten <acronym>HTTP</acronym> Client verwendet.
  68. </para>
  69. <programlisting language="php"><![CDATA[
  70. $my_calendar = 'http://www.google.com/calendar/feeds/default/private/full';
  71. if (!isset($_SESSION['cal_token'])) {
  72. if (isset($_GET['token'])) {
  73. // Ein einmal-verwendbarer Token kann in einen Session Token konvertiert werden
  74. $session_token =
  75. Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
  76. // Speichert den Session Token in der Session
  77. $_SESSION['cal_token'] = $session_token;
  78. } else {
  79. // Zeigt einen Link zur Erstellung eines einmal-verwendbaren Tokens
  80. $googleUri = Zend_Gdata_AuthSub::getAuthSubTokenUri(
  81. 'http://'. $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'],
  82. $my_calendar, 0, 1);
  83. echo "Klicke <a href='$googleUri'>hier</a> um diese Anwendung " .
  84. "zu authorisieren.";
  85. exit();
  86. }
  87. }
  88. // Erstellt einen authentifizierten Http Client um mit Google zu sprechen
  89. $client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['cal_token']);
  90. // Erstellt ein Gdara Objekt das den authentifizierten Http Client verwendet
  91. $cal = new Zend_Gdata_Calendar($client);
  92. ]]></programlisting>
  93. </sect2>
  94. <sect2 id="zend.gdata.authsub.logout">
  95. <title>Beenden der AuthSub Authentifizierung</title>
  96. <para>
  97. Um den authentifizierten Status eines gegebenen Status zu beenden, kann die statische
  98. Funktion <methodname>Zend_Gdata_AuthSub::AuthSubRevokeToken()</methodname> verwendet
  99. werden. Andernfalls bleibt der Token noch für einige Zeit gültig.
  100. </para>
  101. <programlisting language="php"><![CDATA[
  102. // Vorsichtig den Wert erstellen um Sicherheitsprobleme mit der Anwendung zu vermeiden
  103. $php_self = htmlentities(substr($_SERVER['PHP_SELF'],
  104. 0,
  105. strcspn($_SERVER['PHP_SELF'], "\n\r")),
  106. ENT_QUOTES);
  107. if (isset($_GET['logout'])) {
  108. Zend_Gdata_AuthSub::AuthSubRevokeToken($_SESSION['cal_token']);
  109. unset($_SESSION['cal_token']);
  110. header('Location: ' . $php_self);
  111. exit();
  112. }
  113. ]]></programlisting>
  114. <note>
  115. <title>Sicherheitshinweise</title>
  116. <para>
  117. Das Vermeiden der <varname>$php_self</varname> Variable im obigen Beispiel ist eine
  118. generelle Sicherheitsrichtlinie, die nicht nur für
  119. <classname>Zend_Gdata</classname> gilt. Inhalt, der zu <acronym>HTTP</acronym>
  120. Headern ausgegeben wird, sollte immer gefiltert werden.
  121. </para>
  122. <para>
  123. Betreffend der Beendigung des authentifizierten Tokens wird empfohlen, dass dies
  124. gemacht wird, sobald der Benutzer mit seiner Google Data Session fertig ist. Die
  125. Möglichkeit, dass jemand das Token herausfindet und für seine eigenen miesen Zwecke
  126. verwendet, ist sehr klein, aber trotzdem ist es eine gute Praxis einen
  127. authentifizierten Zugriff auf jegliche Services zu beenden.
  128. </para>
  129. </note>
  130. </sect2>
  131. </sect1>