| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: 24249 -->
- <sect1 id="zend.gdata.authsub">
- <title>Authentifizierung mit AuthSub</title>
- <para>
- Der AuthSub Mechanismum erlaubt es Webanwendungen zu schreiben, die einen authentifizierten
- Zugang zu Google Data Services benötigen, ohne dass Code geschrieben werden muß, der
- Benutzerzugangsdaten behandelt.
- </para>
- <para>
- Siehe <ulink
- url="http://code.google.com/apis/accounts/AuthForWebApps.html">http://code.google.com/apis/accounts/AuthForWebApps.html</ulink>
- für weitere Informationen über Google Data AuthSub Authentifizierung.
- </para>
- <para>
- Die Google Dokumentation sagt, dass der ClientLogin Mechanismum ausreichend für "installierte
- Anwendungen" ist, und der AuthSub Mechanismum für "Webanwendungen". Der Unterschied ist das
- AuthSub Interaktion vom Benutzer benötigt, und ein Browser Interface, das auf
- Umleitungsanfragen reagieren kann. Die ClientLogin Lösung verwendet <acronym>PHP</acronym>
- Code um die Benutzerzugangsdaten anzubieten; der Benutzer wird nicht benötigt, um seine
- Zugangsdaten einzugeben.
- </para>
- <para>
- Die Zugangsdaten, die über den AuthSub Mechanismum bereitgestellt werden, werden vom Benutzer
- über die Webanwendung eingegeben. Deswegen müssen es Zugangsdaten sein, die dem Benutzer
- bekannt sind.
- </para>
- <note>
- <title>Registrierte Anwendungen</title>
- <para>
- <classname>Zend_Gdata</classname> unterstützt aktuell die Verwendung von sicheren Tokens
- nicht, weil die AuthSub Authentifizierung die Übergabe von digitalen Zertifikaten, um
- ein sicheres Token zu erhalten, nicht unterstützt.
- </para>
- </note>
- <sect2 id="zend.gdata.authsub.login">
- <title>Einen AuthSub authentifizierten Http Clienten erstellen</title>
- <para>
- Die <acronym>PHP</acronym>-Anwendung sollte einen Hyperlink zur Google
- <acronym>URL</acronym> bieten, welche die Authentifizierung durchführt. Die statische
- Funktion <methodname>Zend_Gdata_AuthSub::getAuthSubTokenUri()</methodname> liefert die
- richtige <acronym>URL</acronym>. Die Argumente dieser Funktion inkludieren die
- <acronym>URL</acronym> zur eigenen <acronym>PHP</acronym>-Anwendung, so dass Google den
- Browser des Benutzers zur eigenen Anwendung zurückleiten kann, nachdem die
- Benutzerdaten verifiziert wurden.
- </para>
- <para>
- Nachdem Googles Authentifizierungsserver den Browser des Benutzers zur aktuellen
- Anwendung umgeleitet haben, wird ein <constant>GET</constant> Anfrageparameter gesetzt,
- der <emphasis>token</emphasis> heißt. Der Wert dieses Parameters ist ein
- einmal verwendbarer Token, der für authentifizierten Zugriff verwendet werden kann.
- Dieser Token kann in einen mehrfach verwendbaren Token konvertiert und in der eigenen
- Session gespeichert werden.
- </para>
- <para>
- Um den Token dann zu verwenden, muß
- <methodname>Zend_Gdata_AuthSub::getHttpClient()</methodname> aufgerufen werden. Diese
- Funktion gibt eine Instanz von <classname>Zend_Http_Client</classname> zurück mit
- gültigen Headern gesetzt, so dass eine nachfolgende Anfrage der Anwendung, die diesen
- <acronym>HTTP</acronym> Clienten verwenden, auch authentifiziert sind.
- </para>
- <para>
- Nachfolgend ist ein Beispiel von <acronym>PHP</acronym> Code für eine Webanwendung um
- eine Authentifizierung zu erlangen, damit der Google Calender Service verwendet werden
- kann, und der ein <classname>Zend_Gdata</classname> Client Objekt erstellt, das diesen
- authentifizierten <acronym>HTTP</acronym> Client verwendet.
- </para>
- <programlisting language="php"><![CDATA[
- $my_calendar = 'http://www.google.com/calendar/feeds/default/private/full';
- if (!isset($_SESSION['cal_token'])) {
- if (isset($_GET['token'])) {
- // Ein einmal-verwendbarer Token kann in einen Session Token konvertiert werden
- $session_token =
- Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
- // Speichert den Session Token in der Session
- $_SESSION['cal_token'] = $session_token;
- } else {
- // Zeigt einen Link zur Erstellung eines einmal-verwendbaren Tokens
- $googleUri = Zend_Gdata_AuthSub::getAuthSubTokenUri(
- 'http://'. $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'],
- $my_calendar, 0, 1);
- echo "Klicke <a href='$googleUri'>hier</a> um diese Anwendung " .
- "zu authorisieren.";
- exit();
- }
- }
- // Erstellt einen authentifizierten Http Client um mit Google zu sprechen
- $client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['cal_token']);
- // Erstellt ein Gdara Objekt das den authentifizierten Http Client verwendet
- $cal = new Zend_Gdata_Calendar($client);
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.gdata.authsub.logout">
- <title>Beenden der AuthSub Authentifizierung</title>
- <para>
- Um den authentifizierten Status eines gegebenen Status zu beenden, kann die statische
- Funktion <methodname>Zend_Gdata_AuthSub::AuthSubRevokeToken()</methodname> verwendet
- werden. Andernfalls bleibt der Token noch für einige Zeit gültig.
- </para>
- <programlisting language="php"><![CDATA[
- // Vorsichtig den Wert erstellen um Sicherheitsprobleme mit der Anwendung zu vermeiden
- $php_self = htmlentities(substr($_SERVER['PHP_SELF'],
- 0,
- strcspn($_SERVER['PHP_SELF'], "\n\r")),
- ENT_QUOTES);
- if (isset($_GET['logout'])) {
- Zend_Gdata_AuthSub::AuthSubRevokeToken($_SESSION['cal_token']);
- unset($_SESSION['cal_token']);
- header('Location: ' . $php_self);
- exit();
- }
- ]]></programlisting>
- <note>
- <title>Sicherheitshinweise</title>
- <para>
- Das Vermeiden der <varname>$php_self</varname> Variable im obigen Beispiel ist eine
- generelle Sicherheitsrichtlinie, die nicht nur für
- <classname>Zend_Gdata</classname> gilt. Inhalt, der zu <acronym>HTTP</acronym>
- Headern ausgegeben wird, sollte immer gefiltert werden.
- </para>
- <para>
- Betreffend der Beendigung des authentifizierten Tokens wird empfohlen, dass dies
- gemacht wird, sobald der Benutzer mit seiner Google Data Session fertig ist. Die
- Möglichkeit, dass jemand das Token herausfindet und für seine eigenen miesen Zwecke
- verwendet, ist sehr klein, aber trotzdem ist es eine gute Praxis einen
- authentifizierten Zugriff auf jegliche Services zu beenden.
- </para>
- </note>
- </sect2>
- </sect1>
|