Zend_Gdata_AuthSub.xml 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.gdata.authsub">
  5. <title>Authentifizierung mit AuthSub</title>
  6. <para>
  7. Der AuthSub Mechanismum erlaubt es Web Anwendungen zu schreiben die einen authentifizierten
  8. Zugang zu Google Data Services benötigen, ohne das 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 das der ClientLogin Mechanismum ausreichend für "installierte
  18. Anwendungen" ist, und der AuthSub Mechanismum für "Web Anwendungen". 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 Web Anwendung 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 das Google den
  45. Browser des Benutzers um zur eigenen Anwendung zurück umleiten kann, nachdem die
  46. Benutzerdaten verifiziert wurden.
  47. </para>
  48. <para>
  49. Nachdem Google's Authentifizierungs Server den Browser des Benutzers zur aktuellen
  50. Anwendung umgeleitet haben, wird eine <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, sodas 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 Web Anwendung 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 Sicherheits Richtlinie, 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 das 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>