Zend_Gdata_AuthSub.xml 6.7 KB

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