Google Kalender API v3 - Authentifizierung mit fest codierten Anmeldeinformationen
Ich Schreibe eine PHP-Anwendung, die angeblich ermöglichen Benutzern das hinzufügen bestimmter Ereignisse zu einem privaten Google-Kalender. Der Kalender ist im Besitz von mir, und ich brauche eine Möglichkeit für PHP zur Kommunikation mit der Kalender-API die Verwendung von festen Anmeldeinformationen (jeder kann Termine hinzufügen über ein Formular auf der website, aber der Kalender selbst ist nicht öffentlich sichtbar).
Von dem, was ich gelesen habe, ist dies möglich mit ClientLogin in den v1-API. In der v3-API, aber die verfügbaren Optionen sind OAuth2.0 oder den API-key. Mithilfe der API-key scheint nicht zu funktionieren, da es nur verwendet werden kann, für Anforderungen, die keine Autorisierung erforderlich, und OAuth scheint nicht das richtige, weil die Benutzer nicht Zugang haben sollen Ihre eigenen Kalender, aber die, die meine Anwendung verwendet.
Dachte ich über das abrufen des OAuth-token programmatisch, aber das ist gebunden zu brechen, früher oder später, da die OAuth-dialog verwenden können captchas.
Das scheint so ein standard-use — case- eine web-Anwendung, mit der Benutzer interagieren mit einem einzigen Kalender in einige vordefinierte Möglichkeiten, aber ich finde keine Dokumentation darüber, wie es geschehen zu lassen in der v3-API. Kann mir jemand helfen?
InformationsquelleAutor der Frage user1063949 | 2011-11-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie sowohl die Entwickler-Schlüssel (API-Key) und OAuth2. Die Entwickler-Schlüssel authentifiziert, der die software geschrieben und wird verwendet für Dinge wie Quote, die auf einer pro Entwickler-basis kein pro-Benutzer-basis. OAuth2 ist für die Benutzerauthentifizierung und Zugriff auf die nicht öffentlichen Kalender.
OAuth2 hat eine renew-token, aus denen Sie generiert einen session-token und dies bedeutet, dass Sie nicht brauchen, um screen scrape die OAuth-Bildschirme zu bekommen, authentifiziert. Um dies zu erhalten, ich würde schreiben Sie eine kleine Kommandozeilen-Anwendung, oder verwenden Sie eine einzige PHP-Seite.
Den AuthorisationState das wurde nun erneuert, kann dann verwendet werden, um zu authentifizieren, rufen Sie die API. dieser Zustand kann verwendet werden, viele der Zeit, bis es abgelaufen ist und dann aktualisiert werden kann. Wie Sie bei Ihrer Anwendung, da Sie sich nicht als Benutzer dieser AuthorisationState geteilt werden können von allem, was Sie Sitzungen. Sowohl die aktuelle AuthorisationState und die refresh-token müssen Sie sicher aufbewahrt werden auf Ihrem server und nie an den client gesendet, wenn Sie jemals gesendet, die diese als Teil einer Antwort-Ihre Kunden haben die gleichen Vorrechte, wie Sie Ihre code-Anwendung
InformationsquelleAutor der Antwort David Waters
Ich eine Lösung gefunden habe, ich denke, das ist die "offizielle" für das, was Sie tun möchten.
Erste, aktivieren Sie ein Google-API "Client-ID für installierte Anwendungen".
Gehen Sie auf die Google API-Konsole und erstellen Sie das Projekt.
Dann, aktivieren Sie die Kalender.
Gehen Sie zu den "API-Zugriff" - option, und verwenden Sie die "Create OAuth 2.0-client" - Taste.
Geben Sie einen Namen (und ein logo, wenn Sie wollen) zu dem Produkt. Klicken Sie auf "weiter".
Wählen Sie die "Installierte Anwendung" - option und klicken Sie auf "Create Client Id".
Nun haben Sie Ihren Zugang konfiguriert. Nun, Sie müssen einige codes. Sie zu erhalten:
*Die "Authentication Code". Um es zu bekommen, benötigen Sie die folgenden Informationen:
UMFANG: https://www.google.com/calendar/feeds/ (wenn Sie Zugriff auf die Kalender-API. Es gibt andere, die Sie können, finden Sie im OAuth 2.0 Playground)
CLIENT_ID: findest Du es bei den API-Zugriff den Abschnitt an der Google API Console.
REDIRECT_URI: Holen Sie es an der gleichen Stelle.
Nun, kopieren Sie den folgenden code in eine Datei, legen Sie die Werte in den Variablen, die den code auszuführen (php -q script_name.php), und gehen Sie auf die URL gedruckt.
Die web-Seite wird Sie bitten, um den Zugang zu ermöglichen. Tun Sie es, und Sie werden einen code erhalten, der eine Authentifizierung Code.
*Die "Aktualisieren-Code". Um es zu bekommen, müssen Sie:
Die Daten, die Sie verwendet haben, bevor, plus die "client-secret" - code in der API Konsole, zwischen den "client-id" und der "redirect URI".
Als zuvor, kopieren Sie den folgenden code, und legen Sie die Variablen im Ort (im Feld code ist der Authentication Code).
Ausführen, und das Ergebnis ist ein "Refresh Token".
In diesem moment, haben Sie alles, was Sie brauchen. Seien Sie vorsichtig, wenn Sie an einem Tag ändern Sie die Authentifizierungs-Code. Sie haben, um neue Schlüssel.
Zugriff auf einen Kalender-service, hier haben Sie das Beispiel:
Ändern Sie die Werte der Variablen vor der Verwendung.
In diesem Beispiel wird der primäre Kalender-Ereignisse, aber Sie können ändern Sie die Adresse für alle, die in der Kalender-API (http://code.google.com/intl/ca/apis/calendar/v3/getting_started.html#background_operations)
Erste, das Skript fragt nach einem "Access Token", das ist eine Stunde lang gültig. Dann das Skript bekommt den REST-Dienst (in der Kalender-Bereich), sendet der access-token in den header.
Zu geben, eine optimale Geschwindigkeit in der Tasche, wäre es gut zu speichern, das access-token im cache, bis es älter als 3600 Sekunden. Auf diese Weise, das Skript würde vermeiden, dass einer der beiden Anrufe.
Tipps:
Besuchen OAuth 2.0 Playground zu verstehen, all die Daten, die in den OAuth-Prozess. Es hat mir sehr geholfen
Einen Beitrag von Eric Nagel in seinem blog gab mir die Lösung. Alle der Verdienst ist zu ihm. Ich kann nicht verlinken, da ich nicht genug "Ruf".
InformationsquelleAutor der Antwort Roger Veciana
Kann auch verwendet werden, die mit dem Google-php-Bibliothek. Das access-token für die
$client->setAccessToken()
Funktion formatiert werden, in der folgenden Weise:Wo
$access_token
ist der access-token von dir finden und$refresh_token
ist die refresh-token. Getestet mit den nutzlos simple.php google Beispiel.Authentifizierung ist dann nur:
InformationsquelleAutor der Antwort yado