Zend_Gdata_AuthSub.xml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15617 -->
  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 PHP Code um die
  21. Benutzerzugangsdaten anzubieten; der Benutzer wird nicht benötigt um seine Zugangsdaten
  22. 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 PHP Anwendung sollte einen Hyperlink zur Google URL bieten die die Authentifizierung
  41. durchführt. Die statische Funktion
  42. <classname>Zend_Gdata_AuthSub::getAuthSubTokenUri()</classname> liefert die richtige
  43. URL. Die Argumente dieser Funktion inkludieren die URL zur eigenen PHP Anwendung so das
  44. Google den Browser des Benutzers um zur eigenen Anwendung zurück umleiten kann, nachdem
  45. die Benutzerdaten verifiziert wurden.
  46. </para>
  47. <para>
  48. Nachdem Google's Authentifizierungs Server den Browser des Benutzers zur aktuellen
  49. Anwendung umgeleitet haben, wird eine GET Anfrageparameter gesetzt der
  50. <code>token</code> heißt. Der Wert dieses Parameters ist ein einmal-verwendbarer Token
  51. der für authentifizierten Zugriff verwendet werden kann. Dieser Token kan in einen
  52. mehrfach-verwendbaren Token konvertiert und in der eigenen Session gespeichert werden.
  53. </para>
  54. <para>
  55. Um den Token dann zu verwenden muß
  56. <classname>Zend_Gdata_AuthSub::getHttpClient()</classname> aufgerufen werden. Diese
  57. Funktion gibt eine Instanz von Zend_Http_Client zurück, mit gültigen Headern gesetzt,
  58. sodas eine nachfolgende Anfrage der Anwendung, die diesen Http Clienten verwenden, auch
  59. authentifiziert sind.
  60. </para>
  61. <para>
  62. Nachfolgend ist ein Beispiel von PHP Code für eine Web Anwendung um eine
  63. Authentifizierung zu erlangen damit der Google Calender Service verwendet werden kann,
  64. und der ein <classname>Zend_Gdata</classname> Client Objekt erstellt das diesen
  65. authentifizierten Http Client verwendet.
  66. </para>
  67. <programlisting language="php"><![CDATA[
  68. $my_calendar = 'http://www.google.com/calendar/feeds/default/private/full';
  69. if (!isset($_SESSION['cal_token'])) {
  70. if (isset($_GET['token'])) {
  71. // Ein einmal-verwendbarer Token kann in einen Session Token konvertiert werden
  72. $session_token =
  73. Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
  74. // Speichert den Session Token in der Session
  75. $_SESSION['cal_token'] = $session_token;
  76. } else {
  77. // Zeigt einen Link zur Erstellung eines einmal-verwendbaren Tokens
  78. $googleUri = Zend_Gdata_AuthSub::getAuthSubTokenUri(
  79. 'http://'. $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'],
  80. $my_calendar, 0, 1);
  81. echo "Klicke <a href='$googleUri'>hier</a> um diese Anwendung " .
  82. "zu authorisieren.";
  83. exit();
  84. }
  85. }
  86. // Erstellt einen authentifizierten Http Client um mit Google zu sprechen
  87. $client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['cal_token']);
  88. // Erstellt ein Gdara Objekt das den authentifizierten Http Client verwendet
  89. $cal = new Zend_Gdata_Calendar($client);
  90. ]]></programlisting>
  91. </sect2>
  92. <sect2 id="zend.gdata.authsub.logout">
  93. <title>Beenden der AuthSub Authentifizierung</title>
  94. <para>
  95. Um den authentifizierten Status eines gegebenen Status zu beenden, kann die statische
  96. Funktion <classname>Zend_Gdata_AuthSub::AuthSubRevokeToken()</classname> verwendet
  97. werden. Andernfalls bleibt der Token noch für einige Zeit gültig.
  98. </para>
  99. <programlisting language="php"><![CDATA[
  100. // Vorsichtig den Wert erstellen um Sicherheitsprobleme mit der Anwendung zu vermeiden
  101. $php_self = htmlentities(substr($_SERVER['PHP_SELF'],
  102. 0,
  103. strcspn($_SERVER['PHP_SELF'], "\n\r")),
  104. ENT_QUOTES);
  105. if (isset($_GET['logout'])) {
  106. Zend_Gdata_AuthSub::AuthSubRevokeToken($_SESSION['cal_token']);
  107. unset($_SESSION['cal_token']);
  108. header('Location: ' . $php_self);
  109. exit();
  110. }
  111. ]]></programlisting>
  112. <note>
  113. <title>Sicherheitshinweise</title>
  114. <para>
  115. Das vermeiden der <code>$php_self</code> Variable im obigen Beispiel ist eine generelle
  116. Sicherheits Richtlinie, die nicht nur für <classname>Zend_Gdata</classname> gilt. Inhalt
  117. der zu Http Headern ausgegeben wird sollte immer gefiltert werden.
  118. </para>
  119. <para>
  120. Betreffend der Beendigung des authentifizierten Tokens wird empfohlen das das gemacht
  121. wird, sobald der Benutzer mit seiner Google Data Session fertig ist. Die Möglichkeit das
  122. jemand das Token herausfindet und für seine eigenen miesen Zwecke verwendet ist sehr
  123. klein, aber trotzdem ist es eine gute Praxis einen authentifizierten Zugriff auf
  124. jegliche Services zu beenden.
  125. </para>
  126. </note>
  127. </sect2>
  128. </sect1>