| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15617 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.gdata.authsub">
- <title>Authentifizierung mit AuthSub</title>
- <para>
- Der AuthSub Mechanismum erlaubt es Web Anwendungen zu schreiben die einen authentifizierten
- Zugang zu Google Data Services benötigen, ohne das 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 das der ClientLogin Mechanismum ausreichend für "installierte
- Anwendungen" ist, und der AuthSub Mechanismum für "Web Anwendungen". Der Unterschied ist das
- AuthSub Interaktion vom Benutzer benötigt, und ein Browser Interface das auf
- Umleitungsanfragen reagieren kann. Die ClientLogin Lösung verwendet PHP 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 Web Anwendung 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 PHP Anwendung sollte einen Hyperlink zur Google URL bieten die die Authentifizierung
- durchführt. Die statische Funktion
- <classname>Zend_Gdata_AuthSub::getAuthSubTokenUri()</classname> liefert die richtige
- URL. Die Argumente dieser Funktion inkludieren die URL zur eigenen PHP Anwendung so das
- Google den Browser des Benutzers um zur eigenen Anwendung zurück umleiten kann, nachdem
- die Benutzerdaten verifiziert wurden.
- </para>
- <para>
- Nachdem Google's Authentifizierungs Server den Browser des Benutzers zur aktuellen
- Anwendung umgeleitet haben, wird eine GET Anfrageparameter gesetzt der
- <code>token</code> heißt. Der Wert dieses Parameters ist ein einmal-verwendbarer Token
- der für authentifizierten Zugriff verwendet werden kann. Dieser Token kan in einen
- mehrfach-verwendbaren Token konvertiert und in der eigenen Session gespeichert werden.
- </para>
- <para>
- Um den Token dann zu verwenden muß
- <classname>Zend_Gdata_AuthSub::getHttpClient()</classname> aufgerufen werden. Diese
- Funktion gibt eine Instanz von Zend_Http_Client zurück, mit gültigen Headern gesetzt,
- sodas eine nachfolgende Anfrage der Anwendung, die diesen Http Clienten verwenden, auch
- authentifiziert sind.
- </para>
- <para>
- Nachfolgend ist ein Beispiel von PHP Code für eine Web Anwendung 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 Http 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 <classname>Zend_Gdata_AuthSub::AuthSubRevokeToken()</classname> 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 <code>$php_self</code> Variable im obigen Beispiel ist eine generelle
- Sicherheits Richtlinie, die nicht nur für <classname>Zend_Gdata</classname> gilt. Inhalt
- der zu Http Headern ausgegeben wird sollte immer gefiltert werden.
- </para>
- <para>
- Betreffend der Beendigung des authentifizierten Tokens wird empfohlen das das gemacht
- wird, sobald der Benutzer mit seiner Google Data Session fertig ist. Die Möglichkeit das
- 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>
|