2014-01-20 8 views
39

Ich habe eine App, die derzeit die com.google.appendinge.api.appidentity.AppIdentityService verwendet, um die Authentifizierung zu erleichtern & Berechtigung für die Verwendung derselben App [dh. dasselbe Konto] Tabellendaten über die SpreadsheetService API. Funktioniert hervorragend im Produktionsmodus für die GAE-Umgebung. Aber aus offensichtlichen Gründen funktioniert es nicht (Authentifizierungsfehler, keine Überraschung) in meiner Entwicklungsumgebung.Konfigurieren der Verwendung von AppIdentityService auf dem Entwicklungsserver

Meine Frage ist: ist es möglich, & ‚unterstützt‘ eine der lokalen Entwicklungsserver zu konfigurieren, dass die notwendigen Schlüssel & Zertifikat Info zu verwenden, um die AppIdentityService zu ermöglichen, wie beabsichtigt zu arbeiten?

Ich lese den Artikel https://sites.google.com/site/oauthgoog/authenticate-google-app-engine-app und ich verstehe es zu zeigen, dass es möglich ist, aber ich sein mis Verständnis wichtigste Punkte & pro Feedback & con bezüglich diesem schätzen würde.

In einer perfekten Welt möchte ich, dass meine Testumgebung den Produktionsmodus so genau wie möglich nachahmt. Ich erwäge auch, die 'normale' oauth2-Web-App-Authentifizierung in meinem Test-Env zu verwenden, würde aber lieber mit AppIdentityService arbeiten, wenn irgend möglich.

Ich vermute, die com.google.appengine.api.appidentity.dev.LocalAppIdentityService Klasse in der appengine-api-stubs.jar ist die beabsichtigte Technik, aber hat jemand anderes auch dies verwendet, um AppIdentityService Authentifizierung in einem Entwicklungsserver zu bieten? Meine ursprüngliche Annahme ist, dass die in com.google.appengine.spi.FactoryProvider gefundene Klasse com.google.appengine.api.appidentity.IAppIdentityServiceFactoryProvider ersetzt wird, um meine eigene Factory-Klasse mit der obigen LocalAppIdentityService-Klasse zu verwenden. Oder belle ich den falschen Baum an?

Verwenden GAE SDK 1.8.8 für Java.

+2

Ich glaube nicht, es sehr viel Sinn macht AppIdentity zu verwenden: das Vertrauen Anker für AppIdentity ist App Engine in Prod. In der Entwicklungsumgebung benötigen Sie ohnehin einen neuen Vertrauensanker (d. H. Ein Dienstkonto). Sie könnten einen neuen AppIdentityService programmieren, aber warum? Sie benötigen in Dev einen neuen Benutzer und daher einen anderen Code. Ich benutze Fabriken, die DriveService und SpreadsheetService, mit AppIdentity (in Prod) oder Dienstkonto (in Dev) zu erzeugen. AppIdentity und das Dienstkonto erhalten unterschiedliche Berechtigungen in Drive, können das Dienstkonto nur Testdaten zugreifen. –

Antwort

1

Wenn die GAE Java App Identity API unter dem lokalen Dev-Server ausgeführt wird, ruft sie die GoogleCredentials library to retrieve the default application credential auf.

  1. Die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS wird geprüft. Wenn diese Variable angegeben wird, sollte sie auf eine Datei verweisen, die die Anmeldeinformationen definiert. Der einfachste Weg, um einen Berechtigungsnachweis für diesen Zweck zu erhalten, ist ein Dienstkonto mit den Google Developers Console im Abschnitt APIs Credentials & Auth im Unterabschnitt zu erstellen. Erstellen Sie ein Dienstkonto oder wählen Sie ein vorhandenes aus und wählen Sie . Generieren Sie den neuen JSON-Schlüssel. Setzen Sie die Umgebungsvariable auf den Pfad der heruntergeladenen JSON-Datei.
  2. Wenn Sie das Google Cloud SDK auf Ihrem Computer installiert haben und den Befehl gcloud auth login ausgeführt haben, kann Ihre Identität als ein Proxy verwendet werden, um Codeaufruf-APIs von diesem Computer zu testen.
  3. Wenn Sie in der Google App Engine-Produktion arbeiten, wird das mit der Anwendung verknüpfte integrierte Dienstkonto verwendet.
  4. Wenn Sie in der Google Compute Engine-Produktion arbeiten, wird das integrierte Dienstkonto verwendet, das der Instanz der virtuellen Maschine zugeordnet ist.
  5. Wenn keine dieser Bedingungen zutrifft, tritt ein Fehler auf.

Es sieht aus wie Option # 2 ist wahrscheinlich für Sie am einfachsten (gcloud auth login führen Sie Ihren Code haben Sie mit Ihrem Google-Konto für die Authentifizierung, wenn sie lokal ausgeführt werden), aber man könnte auch tun # 1.

1

Ich habe mit GAE PHP Entwickler-Server arbeiten und hatte das gleiche Problem mit der AppIdentity Dienst nicht richtig funktioniert. In PHP können Sie dieses Problem umgehen, indem Sie die $_SERVER['APPLICATION_ID']-dev~yourapplicationid Einstellung. Ich bin sicher, es muss ein Weg sein, das gleiche in Java zu tun, müssen Sie nur dev~ zu Beginn Ihrer Anwendungs-ID vorangestellt mit der Entwickler-Umgebung zu arbeiten.

Verwandte Themen