Wie beschränke ich die Google App Engine Endpunkte der API-Zugriff nur auf meinem Android-Anwendungen?

Ich bin ein Android-Entwickler mit dem Bau meines ersten Google App Engine (java) Backend für meine apps. Ich will nicht, dass jemand anderes Zugriff auf diese API anders, als mein app. (Ich Plane zu verwenden App engine, die für die überprüfung der InApp-Käufe in meine Android-app). Meine Daten sind nicht relevant für Benutzer so,
Ich don ' T möchten, dass Benutzer in der Lage sein, um Zugriff auf meine API, auch wenn Sie angemeldet sind, mit Ihren Google-Konten (auf web-oder Android-Geräte).

Folgte ich die Schritte erwähnt, die in "die Angabe autorisierte clients in der API-backend"
(https://developers.google.com/appengine/docs/java/endpoints/auth)
wie generieren von client-IDs und fügen Sie Sie in @Api (clientIds und Publikum)
außer "Hinzufügen einer Benutzer-parameter" - da brauche ich nicht Benutzer-Authentifizierung.

Dann habe ich bereitgestellt, App engine und ich bin immer noch in der Lage, den Zugriff auf die API über API-explorer (https://your_app_id.appspot.com/_ah/api/explorer)
(Ich habe nicht Hinzugefügt API_EXPLORER client-ID)

Getestet habe ich mit der APK, die gebaut wurde, mit dem Endpunkt libs vor dem hinzufügen von client-IDs und kann immer noch Zugriff auf die API.

  • Ist das hinzufügen eines "Benutzer-parameter", um alle endpoint APIs ein muss? um meinen Zweck (Einschränkung API nur meine Android apps).

  • Kann ich übergeben Sie null als userAccount name von Android client und ignorieren user-parameter-Wert auf dem server (da es null sein)? Dies gewährleistet, dass die API zugänglich ist, nur von meinem android-apps (da die client-ID generiert wird, für mein package-name und der SHA1-Hash des APK -?)

  • Sollte ich so etwas wie ein service-Konto für diesen Zweck?

In der Dokumentation sagt für Android, Android-und Web-client-IDs Hinzugefügt werden muss, und das Publikum muss die gleiche sein, wie web-client-ID. Hat dieser offene Zugang zu anderen web-client? kann ich direkt erwähnen, web-client-ID und noch erreichen mein Ziel?

Schätzen Ihre Zeit und Hilfe.

...... die Aktualisierung mit meiner weiteren recherche ...

Habe ich Folgendes:

  • Hinzugefügt Benutzer-parameter auf APIs, die auf backend - aber nicht für null-Wert. API kann immer noch zugegriffen werden, ohne übergabe von Anmeldeinformationen (von Android APK-debug-und API-explorer)

  • Dann habe ich versucht

    mCredential = GoogleAccountCredential.usingAudience(this, "server:client_id:" + WEB_CLIENT_ID);
    mCredential.setSelectedAccountName(null);

übergeben und diese Anmeldeinformationen für die API-generator (wie bereits in einigen anderen Beiträgen)
Verursacht SCHWERWIEGENDE AUSNAHME. Also, wir können nicht übergeben Sie null-Konto-Namen.

  • Konnte ich rufen Sie die API mit API-explorer ohne OAuth. Aber wenn ich aktiviert OAuth, es gab Fehlermeldung besagt, dass diese client-ID ist nicht zulässig! ( Ich habe noch nicht Hinzugefügt com.google.api.server.spi.Konstant.API_EXPLORER_CLIENT_ID in client_ids{})

  • Dann habe ich die code zu werfen OAuthRequestException auf das backend, wenn der user gleich null ist. Dies führte in der API-explorer-Fehler erhalten, ohne OAuth. Es arbeitet mit OAuth aktiviert nach dem hinzufügen API_EXPLORER_CLIENT_ID zu client_ids)

  • Code Hinzugefügt, um pass mit gültigem Benutzer-account-name(E-Mail) von meinem Android-app. Dann bin ich in der Lage, access-API nur mit meinem release APK. Sogar die debug APK bekommt Ausnahmen!!! - das ist, was ich erwartet hatte..So, ich nehme keine anderen Android apps haben Zugriff auf diese API.

So, nicht null-Benutzer auf back-end-API ist eine schlechte Idee (wie bereits in anderen posts). Es ist so gut wie nicht zu erwähnen, jeder client_ids und nicht mit User-param.

Einzige Frage die ich habe in diesem moment ist: Wenn jemand herausfinden können, ist der WEB_CLIENT_ID von der APK, wird Sie in der Lage sein, es zu benutzen, erstellen Sie ein web-client den Zugriff auf meine API (ich habe nicht erwähnt, client secret, die irgendwo in den code. Also ich denke das ist nicht möglich).


Habe ich die Suche von Google groups und Stackoverflow, aber es ist noch nicht klar.

  • Siehe meine Antwort auf dieses problem in diesem Beitrag: stackoverflow.com/questions/16890175/...
  • Sie sichern könnte, die API mit OAUTH nur durch end-user-Authentifizierung über Google-Konto, aber sonst nicht? Ist das noch deine neueste Erkenntnis?
InformationsquelleAutor Kakatiyudu | 2014-02-17
Schreibe einen Kommentar