
September 2008
Einführung
Das sind spannende Zeiten für Entwickler. Wir sehen, dass eine Reihe offener Standards im Web eingeführt werden. Google war schon immer ein großer Fan von Standards und der Förderung der Open-Source-Community.
Vor Kurzem wurde in allen Google Data APIs die Unterstützung für OAuth eingeführt. Dieses offene Protokoll soll die Art und Weise standardisieren, wie Desktop- und Webanwendungen auf die privaten Daten eines Nutzers zugreifen. OAuth bietet eine standardisierte und sichere Methode zur API-Authentifizierung. Als Programmierer lernen wir, Code nach Möglichkeit wiederzuverwenden. OAuth hilft Entwicklern, die Menge an doppeltem Code zu reduzieren, und erleichtert die Erstellung von Tools, die mit mehreren Diensten von verschiedenen Anbietern funktionieren.
Zielgruppe
In diesem Artikel wird davon ausgegangen, dass Sie mit einer oder mehreren Google Data APIs vertraut sind, aber nicht unbedingt mit den Konzepten hinter OAuth. Wenn Sie gerade erst anfangen oder einfach nur mehr über OAuth erfahren möchten, sind Sie hier genau richtig. In diesem Artikel werden die Grundlagen der Konzepte erläutert. Außerdem werde ich die Details der OAuth-Implementierung von Google erläutern.
Dieses Dokument richtet sich auch an Entwickler, die mit der Verwendung von AuthSub vertraut sind, insbesondere im Modus mit erweiterter Sicherheit registriert. Im Folgenden werde ich versuchen, die Ähnlichkeiten und Unterschiede zwischen den beiden Protokollen hervorzuheben. Wenn Sie Anwendungen mit AuthSub haben, können Sie diese Informationen verwenden, um zu OAuth zu migrieren, einem offeneren, modernen Protokoll.
Einige Begriffe
Um OAuth zu verstehen, müssen Sie die Terminologie kennen. Die OAuth-Spezifikation und die Dokumentation OAuth-Authentifizierung für Webanwendungen von Google basieren stark auf bestimmten Definitionen. Daher möchten wir klären, was die einzelnen Begriffe im Kontext der OAuth-Implementierung von Google bedeuten.
- „OAuth-Ablauf“
Mein inoffizieller Begriff für den vollständigen OAuth-Authentifizierungs- und ‑Autorisierungsprozess.
- (OAuth) Anfragetoken
Ein erstes Token, mit dem Google erfährt, dass Ihre Anwendung Zugriff auf eine der Google Data APIs anfordert. Im zweiten Schritt des OAuth-Ablaufs muss der Nutzer manuell Zugriff auf seine Daten gewähren. Wenn dieser Schritt erfolgreich ist, wird das Anfragetoken autorisiert.
- (OAuth-)Zugriffstoken
Im letzten Schritt wird das autorisierte Anfragetoken gegen ein Zugriffstoken eingetauscht. Sobald Ihre Anwendung dieses Token hat, muss ein Nutzer den OAuth-Ablauf nicht noch einmal durchlaufen, es sei denn, das Token wird widerrufen.
Ähnlichkeit zu AuthSub
Ein OAuth-Zugriffstoken ist dasselbe wie ein sicheres AuthSub-Sitzungstoken. - (OAuth-)Endpunkte
Dies sind URIs, die zum Authentifizieren einer Anwendung und zum Abrufen eines Zugriffstokens erforderlich sind. Es gibt insgesamt drei, einen für jeden Schritt des OAuth-Prozesses. Die OAuth-Endpunkte von Google sind:
Fordern Sie ein Anfrage-Token an: https://www.google.com/accounts/OAuthGetRequestToken
Autorisieren Sie das Anfragetoken: https://www.google.com/accounts/OAuthAuthorizeToken
So führen Sie ein Upgrade auf ein Zugriffstoken durch: https://www.google.com/accounts/OAuthGetAccessToken
Ähnlichkeit zu AuthSub:
Das Eintauschen eines autorisierten Anfragetokens gegen ein Zugriffstoken entspricht dem Upgrade eines AuthSub-Einmal-Tokens auf ein langlebiges Sitzungstoken unterhttps://www.google.com/accounts/AuthSubRequestToken
bzw.https://www.google.com/accounts/AuthSubSessionToken
. Der Unterschied besteht darin, dass es bei AuthSub kein Konzept für ein anfängliches Anfragetoken gibt. Stattdessen startet der Nutzer den Tokenprozess auf der AutorisierungsseiteAuthSubRequestToken
. - (OAuth-)Dienstanbieter
Bei den Google Data APIs ist dieser Anbieter Google. Im Allgemeinen wird der Begriff „Dienstanbieter“ verwendet, um die Website oder den Webdienst zu beschreiben, der die OAuth-Endpunkte bereitstellt. Ein weiteres Beispiel für einen OAuth-Dienstanbieter ist MySpace.
- (OAuth-)Consumer
Das Programm, das die Berechtigung zum Zugriff auf die Daten eines Nutzers anfordert (d.h. Ihre Anwendung). Das OAuth-Protokoll ist flexibel und unterstützt eine Vielzahl verschiedener Clienttypen (Web, installiert, Desktop, Mobil).
Hinweis: Das OAuth-Protokoll unterstützt zwar den Anwendungsfall für Desktop-/installierte Anwendungen, Google unterstützt OAuth jedoch nur für Webanwendungen.
Erste Schritte
Anmeldung
Bevor Sie OAuth mit den Google Data APIs verwenden können, müssen Sie einige Schritte ausführen. Da alle OAuth-Anfragen digital signiert werden müssen, müssen Sie zuerst Ihre Domain registrieren und ein öffentliches Zertifikat bei Google hochladen. Weitere Informationen dazu finden Sie unter Registrierung für webbasierte Anwendungen und Schlüssel und Zertifikate für die Verwendung im registrierten Modus generieren.
Signieranfragen
Sobald Ihre Domain registriert ist, können Sie Anfragen signieren. Eines der schwierigsten Konzepte von OAuth ist die richtige Erstellung von oauth_signature
und die Signaturbasiszeichenfolge. Die Basis-String ist der Wert, den Sie mit Ihrem privaten Schlüssel signieren (mit RSA_SHA1
). Das Ergebnis ist der Wert, den Sie für oauth_signature
festlegen.
Beispielanfrage
GET
eine Liste der Google-Kalender eines Nutzers unter http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime
Format des Basis-Strings | base_string = http-method&base-http-request-url&normalized-string-of-oauth_parameters |
---|---|
Beispiel für einen Basisstring | GET&http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull&oauth_consumer_key%3Dexample.com%26oauth_nonce%3D4572616e48616d6d%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D137131200%26oauth_token%3D1%252Fab3cd9j4ks73hf7g%26oauth_version%3D1.0%26orderby%3Dstarttime |
Beispiel für eine HTTP-Anfrage |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: OAuth oauth_token="1%2Fab3cd9j4ks73hf7g", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9AvZbTSMK%2FPY%3D...", oauth_consumer_key="example.com", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d", oauth_version="1.0" |
Hinweis: Dies dient nur als Darstellung. Ihre oauth_signature
wird viel länger sein.
Hinweise zum Basisstring:
- Der Abfrageparameter
orderby=starttime
wird zusammen mit den anderenoauth_*
-Parametern in lexikografischer Byte-Wert-Reihenfolge sortiert. - Dieser String enthält auch kein Fragezeichen.
- Der
base-http-request-url
-Teil enthält nur die URL-codierte Basis-URL:http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull
. oauth_token
ist doppelt URL-codiert.
Hinweise zum Authorization
-Header:
- Die Reihenfolge der
oauth_*
-Parameter imAuthorization
-Header spielt keine Rolle. - Der Header enthält nicht
orderby=starttime
wie der Basisstring. Dieser Abfrageparameter wird als Teil der Anfrage-URL beibehalten.
Weitere Informationen zum Signieren von Anfragen mit OAuth finden Sie unter OAuth-Anfragen signieren.
Unterschied zu AuthSub
Zum Vergleich hier dasselbe Beispiel mit sicherem AuthSub:
Format des Basis-Strings | base_string = http-method http-request-URL timestamp nonce |
---|---|
Beispiel für einen Basisstring |
GET http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull%3Forderby%3Dstarttime 137131200 4572616e48616d6d |
Beispiel für eine HTTP-Anfrage |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: AuthSub token="GD32CMCL25aZ-v____8B" data="GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime 137131200 4572616e48616d6d" sig="MCwCFrV93K4agg==..." sigalg="rsa-sha1" |
Weitere Informationen zum Signieren von Anfragen mit AuthSub finden Sie unter AuthSub-Anfragen signieren.
OAuth Playground-Tool
Zweck
Einige Nutzer haben angemerkt, dass OAuth eine hohe Lernkurve hat. Im Vergleich zu anderen Authentifizierungs-APIs von Google stimme ich zu. Der Vorteil von OAuth wird deutlich, wenn Sie Ihre App so erweitern, dass sie andere (nicht von Google stammende) Dienste verwendet. Einen einzigen Authentifizierungscode zu schreiben, der für verschiedene Dienstanbieter und ihre APIs funktioniert, klingt für mich ziemlich gut. Sie werden es sich später danken, wenn Sie das Protokoll jetzt lernen.
Der OAuth Playground ist ein Tool, das ich erstellt habe, um Entwicklern bei ihren OAuth-Problemen zu helfen. Mit dem Playground können Sie Probleme beheben, Ihre eigene Implementierung prüfen oder mit den Google Data APIs experimentieren.
Welche Funktionen sind enthalten?
- Hier wird der OAuth-Authentifizierungsvorgang veranschaulicht: Abrufen eines Anfragetokens, Autorisieren des Tokens und Aktualisieren des Tokens zu einem Zugriffstoken.
- Zeigt für jede Anfrage den richtigen Signaturbasisstring an.
- Zeigt für jede Anfrage den richtigen
Authorization
-Header an. - Hier wird gezeigt, wie Sie mit einem
oauth_token
mit einem authentifizierten Google-Datenfeed interagieren. Sie können Daten fürGET
/POST
/PUT
/DELETE
abrufen. - Authentifizierte Feeds direkt im Browser ansehen
- Damit können Sie Ihre eigene
oauth_consumer_key
(Ihre registrierte Domain) und Ihren privaten Schlüssel testen. - Hier erfahren Sie, welche Google-Dienste für Datenfeeds für Ihr
oauth_token
verfügbar sind.
Demolauf
Schritt 1: Bereiche auswählenLegen Sie zuerst fest, welche APIs Sie verwenden möchten, indem Sie einen oder mehrere Bereiche auswählen. In dieser Demonstration fordere ich ein Token an, das mit Blogger und Google Kontakte funktioniert. Ähnlichkeit zu AuthSub |
![]() |
Schritt 2: OAuth-Parameter und -Einstellungen ändernÄndern Sie vorerst keine Einstellungen im Feld „OAuth-Parameter ändern“. Später können Sie mit Ihrem eigenen privaten Schlüssel testen, indem Sie Hinweis: Nur die Felder Zusätzlich zu Unterschied zu AuthSub |
![]() |
Schritte 3 bis 5: Zugriffstoken abrufenEs gibt drei Schritte, um ein OAuth-Zugriffstoken zu erhalten. Der erste Schritt besteht darin, ein Anfragetoken abzurufen. Dadurch erfährt Google, dass Ihre Anwendung den OAuth-Ablauf startet. Klicken Sie zuerst im Feld „Token abrufen“ auf die Schaltfläche „Token anfordern“. Bestimmte Felder werden mit Daten gefüllt.
|
![]() ![]() |
Klicken Sie als Nächstes im Feld „Token abrufen“ auf die Schaltfläche „Autorisieren“. Klicken Sie auf dieser Autorisierungsseite auf die Schaltfläche „Zugriff gewähren“, um das Anfragetoken zu autorisieren und zum OAuth Playground zurückgeleitet zu werden. Ähnlichkeit zu AuthSub Unterschied zu AuthSub: Tipp: Wenn Sie eine Webanwendung schreiben, sollten Sie eine |
![]() |
Klicken Sie abschließend im Feld „Get the Token“ (Token abrufen) auf die Schaltfläche „Access token“ (Zugriffstoken). Dadurch wird das autorisierte Anfragetoken aktualisiert (siehe rotes Label „Zugriffstoken“). Wenn Sie ein neues Token abrufen möchten, klicken Sie auf „Von vorn beginnen“, um den OAuth-Ablauf neu zu starten. Jetzt können wir etwas Interessantes tun. |
![]() |
Zugriffstoken verwenden
Jetzt können Sie Feeds abfragen, Daten einfügen, aktualisieren oder löschen. Seien Sie bei diesen letzten drei HTTP-Methoden vorsichtig, da Sie mit Ihren echten Daten arbeiten.
Tipp: Wenn Sie herausfinden möchten, welche Feeds für Ihr Zugriffstoken verfügbar sind, klicken Sie auf die Schaltfläche „Verfügbare Feeds“.
Hier eine Beispielabfrage: GET http://www.blogger.com/feeds/1982051675575479214/posts/default?max-results=3

In diesem Beispiel werden maximal drei Beiträge in einem bestimmten Blog zurückgegeben. Sie können den zurückgegebenen Feed bzw. Eintrag auch direkt in Ihrem Browser aufrufen. Klicken Sie dazu unter dem Bereich mit der hervorgehobenen Syntax auf den Link „Im Browser ansehen“.
Beispiel: Beitrag aktualisieren
- Suchen Sie im Beitrag, den Sie aktualisieren möchten, nach dem
<link>
-Element mit einem rel="edit". Er sollte etwa folgendermaßen aussehen:<link rel="edit" href="http://www.blogger.com/feeds/1982051675575479214/posts/default/8138973184593279875"/>
Fügen Sie die href-URL in die Eingabe „Google-Datenfeed eingeben“ ein.
- Kopieren Sie das XML des vorhandenen Eintrags, indem Sie oben im Bereich mit der Syntaxhervorhebung auf „view plain“ (Als Nur-Text anzeigen) klicken. Kopieren Sie nur den Antworttext, nicht die Header.
- Ändern Sie die Drop-down-Liste für die HTTP-Methode zu
PUT
. - Klicken Sie unter diesem Drop-down-Menü auf „Beitragsdaten eingeben“ und fügen Sie die
<entry>
-XML-Datei in das Pop-up-Fenster ein. - Klicken Sie auf die Schaltfläche „Ausführen“.
Der Server antwortet mit 200 OK
.
Tipp: Anstatt den edit
-Link manuell zu kopieren, können Sie das Kästchen „Syntax Highlight?“ deaktivieren. Nach einer Anfrage können Sie auf die Links im XML-Antworttext klicken.
Fazit
Technologien wie das AtomPub-/Atom Publishing Protocol (zugrunde liegendes Protokoll der Google Data APIs) und OAuth tragen zur Weiterentwicklung des Webs bei. Je mehr Websites diese Standards unterstützen, desto besser für uns Entwickler. Das Erstellen einer Killer-App wird dadurch plötzlich weniger entmutigend.
Wenn Sie Fragen oder Anmerkungen zum OAuth Playground oder zur Verwendung von OAuth mit Google APIs haben, besuchen Sie uns im G Suite APIs and Marketplace APIs Support Forum.