2017-01-25 6 views
0

Ich habe eine API in Python mit Google Cloud Endpoint Framework erstellt und mein Android Client ist die einzige Anwendung, die die Erlaubnis hat, mit der API zu kommunizieren.Cloud Endpoint Authentication Zielgruppen

folgte ich die Tutorials und Anleitungen auf Google für die Authentifizierung und die API zum Schutz ein Zugriff auf bestimmte Client-IDs geben kann:

WEB_CLIENT_ID = 'myApiClientId.apps.googleusercontent.com' 
ANDROID_CLIENT_ID = 'myAndroidClientId.apps.googleusercontent.com' 
ANDROID_AUDIENCE = [ANDROID_CLIENT_ID] 
ALLOWED_CLIENT_IDS = [WEB_CLIENT_ID, ANDROID_CLIENT_ID, endpoints.API_EXPLORER_CLIENT_ID] 

api_collection = endpoints.api(name='myApi', 
           version='v1', 
           allowed_client_ids=ALLOWED_CLIENT_IDS, 
           audiences=ANDROID_AUDIENCE, 
           auth_level=endpoints.AUTH_LEVEL.REQUIRED 
           ) 

Auf dieser site sie sagen, dass „das Publikum“, um die Client-ID von enthalten sollte Die Backend-API

Für Android-Clients ist dieser Mechanismus das Zielgruppenargument, in dem Sie die Client-ID der Back-End-API angeben.

Aber auf this Website, sagen sie, dass die "Zuschauer" Feld, um die Android-Client-ID enthalten:

ALLOWED_CLIENT_IDS mit der Liste der OAuth 2-Client-IDs erzeugt von jedem Client von Google Cloud Platform-Konsole ersetzen project und ersetzen Sie ANDROID_AUDIENCE mit der Liste der Android-Webclient-IDs. Die Webclient-ID ist die Client-ID, an die .apps.googleusercontent.co angehängt ist. Beispiel: YOUR-CLIENT-ID.apps.googleusercontent.com.

Wie schützt man die API vor unberechtigtem Zugriff? Ich brauche nicht das "Benutzer" -Konto auf der Backend-Seite, ich möchte nur, dass der Android-Client der einzige Client ist, der auf die API zugreifen kann. Mein REST-Client kann auch auf die API zugreifen, obwohl die Client-IDs angegeben sind und AUTH_LEVEL auf erforderlich gesetzt ist.

Antwort

0

Es scheint, dass ANDROID_AUDIENCE die Web-Client-ID des Backend-Servers sein muss. Außerdem musste ich eine neue "Web-Client-ID" für meine Android-Anwendung hinzufügen, aber nicht vom Typ "Android", sondern "Webapplication". Diese Client-ID muss zusammen mit der Android-Client-ID und im Array ALLOWED_CLIENT_IDS auf dem Back-End-Server in der Datei google-services.json enthalten sein.

Und in jeder Methode muss ich nach get_current_user() überprüfen. Ich verstehe nicht, warum das notwendig ist, aber es funktioniert nur so.

Ich muss wirklich sagen, dass die Dokumentation oder besser "Guides" könnte ein bisschen beeter auf Google-Website und konsistent sein.

Verwandte Themen