Zend_Gdata_AuthSub.xml 6.5 KB

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