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.
-
(Authentifizieren meine "app" zu Google cloud endpoints nicht ein "user")
Authentifizieren meine "app" zu Google Cloud Endpoints nicht ein "user" -
(Wie Schütze ich meinen API, die erstellt wurde, mithilfe von Google Cloud Endpoints?)
Wie Schütze ich meine API, die erstellt wurde, mithilfe von Google Cloud Endpoints? -
(Beschränken Sie den Zugriff auf google cloud endpoints zur Android-app)
Beschränken Sie den Zugriff auf google cloud endpoints zur Android-app
- 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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte ein ähnliches Problem, nicht zwischen Android und App Engine, aber zwischen einem separaten server und der App Engine. Die Art, wie ich behandelt wurde es zum hinzufügen einer Signatur, hash-Feld als parameter mit jedem API-Aufruf. Wenn die Anforderung hatte, eine falsche Signatur, es würde verweigert werden.
Angenommen, Ihre API-Endpunkt
example.com/api/do_thing?param1=foo
. Ich würde-hash der gesamten url, zusammen mit einem geheimen Schlüssel, und fügen Sie das Ergebnis der hash der Anfrage:example.com/api/do_thing?param1=foo&hash=[some long hex value]
.Dann, auf der server-Seite würde ich entfernen Sie zuerst den hash aus der url-Anforderung, führen Sie dann den hash auf alles, was noch. Schließlich, überprüfen Sie, ob der berechnete hash übereinstimmt, die gesendet wurde mit der bitte und wenn Sie nicht, können Sie die Anfrage ablehnen.
Ist es sehr wichtig, jedoch, dass Sie den geheimen Schlüssel geheim bleiben. Sie müssen vorsichtig sein, mit diesem auf Android, da könnte jemand versuchen zu dekompilieren Ihre APK.
Vor dem gleichen problem, als du ! Authentifizieren Android Endpunkt ohne Google-Benutzerkonto ist einfach unmöglich !
So, hier ist mein Weg, um resolv dieses problem, ohne Interaktion mit dem Benutzer (Vielleicht nicht richtig, aber das funktioniert, und Sie haben starke Authentifizierung (SHA1 + Google Konto)):
HIER IST MEIN ANDROID CODE
Bekommen und Bauen Sie Gültige Anmeldeinformationen
Verwenden Sie diese Anmeldeinformationen für sichere Anrufe
HIER IST MEIN API-BACKEND-CODE:
API-Annotation
Methode nicht code:
Für den moment, es funktioniert nur auf Android (ich weiß nicht wie wir gonna do auf IOS..)..
Hoffe, Es wird dir helfen !
Google bietet Möglichkeiten, dies zu tun für
Android
,web
undiOS
Die Schritte beinhaltet:
Diese Schritte sind festgelegt, die in klaren Details auf Google Mit Auth mit Endpunkten und auch auf diesem blog
Vor dem gleichen problem, hier sind das Ergebnis meiner Forschung :
ABER :
Wenn ich keine Benutzer hinzufügen parameter für Methoden : die Prüfung über android-app-client-id funktioniert nicht
Wenn ich die BENUTZER-parameter, aber nicht den Benutzer auffordern, wählen Sie Ihr google-Konto zu erstellen, die die Berechtigung ... auch funktioniert es nicht ...
Fazit : Es scheint zwingend notwendig zu sein, um verbinden Sie einen Benutzer-account für die Prüfung über den app-client-id ausgeführt werden ... ich verstehe wirklich nicht, warum da kein link vorhanden zwischen den 2 Prozessen
Der Zugriff auf diese site
Wählen Sie Ihr Projekt, gehen Sie zu Abschnitt Anmeldeinformationen
Erstellen Sie eine neue api-Schlüssel
Erstellen Sie eine neue android key
Klicken Sie auf "Bearbeiten erlaubt android-Anwendungen" und geben Sie Ihre SHA1-Taste; Ihre android-Paketnamen
Lassen Sie mich wissen, ob dies löst die Probleme.