2016-11-11 5 views
1

Ich habe ein Google App Engine-Projekt, das eine API über Google Cloud Endpoints verfügbar macht. Bis jetzt verwendeten alle APIs/Endpunkte die OAuth2-Authentifizierung (und Autorisierung), was für "echte" Benutzer gut ist.Java-Anmerkungen zur API-Schlüsselautorisierung in Google Cloud Endpoint?

Jetzt möchte ich einige neue APIs offen legen, die von Maschinen anstelle von menschlichen Benutzern verwendet werden sollen. Ich möchte, dass diese Endpunkte die API-Schlüsselautorisierung verwenden.

In der Cloud-Konsole habe ich einen API-Schlüssel (API-Manager/Anmeldeinformationen) gemacht.

Das Google documentation verwendet eine yaml-Datei, um die API-Schlüsselautorisierung zu konfigurieren. Allerdings verwende ich keine yaml-Konfiguration und dies scheint für Java-Anwendungen nicht üblich zu sein.

Ich würde erwarten, dass es für Java Anmerkungen mit API-Schlüsseln zu autorisieren geben würde. Allerdings erwähnt das Google documentation für Java nichts dergleichen.

Ist es möglich, API-Schlüssel in einer Java-Anwendung mit Anmerkungen zu verwenden? Gibt es einen anderen empfohlenen Weg, dies zu tun?

UPDATE: Es scheint, dass API-Schlüssel in Cloud Endpoints 2.0 arbeiten, die in der Beta (November 2016) ist. Allerdings wird CE 2.0 nicht vom Google Eclipse-Plugin unterstützt und erfordert Maven (was ich nicht mag). Ich habe keine Zeit, mein Projekt neu zu schreiben, deshalb habe ich jetzt einen zusätzlichen "api_key" -Parameter zu meiner API hinzugefügt, den ich einchecke. Beachten Sie, dass dieser Parameter nicht als "Schlüssel" bezeichnet werden kann, da der Cloud-Endpunkt denkt, dass dies sein eigener API-Schlüssel ist, und er antwortet, dass der Zugriff nicht konfiguriert ist.

Antwort

2

Ja, es ist möglich. Aktualisieren Sie auf das neueste Framework, und verwenden Sie in @Api, @ApiClass oder @ApiMethod das Feld apiKeyRequired. Wir haben das kürzlich hinzugefügt und die Dokumente haben noch nicht aufgeholt. Entschuldigung!

+0

Das Google Eclipse-Plugin scheint (noch) nicht über dieses Update zu verfügen? Es sieht so aus, als wäre es bei 1.9.34 stecken geblieben. Oder muss ich zuerst Eclipse aktualisieren (immer noch mit Mars 2)? – rakensi

+0

Nur das neue Framework unterstützt dies, das nicht mit dem App Engine SDK ausgeliefert wird. Sie benötigen die com.google.endpoints, Endpoints-Framework-Artefakte. – saiyr

+0

Danke, ich werde das versuchen. – rakensi

1

Ich hatte das gleiche Problem gestern.

Ich war nach diesem Beispiel in Java und Maven:

backend

jedoch das Beispiel nicht api-Schlüssel Berechtigung hat.

Also habe ich mehrere Stunden damit verbracht, zu entschlüsseln, wie man dem Beispiel eine API-Schlüsselautorisierung hinzufügt.

Da es keine Dokumentation zum Hinzufügen von api-key-Annotationen in Java gibt, habe ich die Annotation manuell in swagger.json hinzugefügt.

ich die swagger.json Datei bearbeitet und hinzugefügt:

1), um die Sicherheit Variable

"Security": [ 
    { 
    "Api_key": [] 
    } 
    ], 
"You consume": [ 
    "Application/json" 
], 

2) die Variable api_key in securityDefinitions

"SecurityDefinitions": { 

"Api_key": { 
    "Type": "apiKey", 
    "Name": "key", 
    "In": "query" 
}, 
    "Google_id_token": { 

Dies das Problem gelöst.

Danach habe ich mit dem Deploy to App Engine-Prozess fortgesetzt, der in der README definiert ist.md Beispiel:

1) gcloud Beta-Service-Management-deploy swagger.json

2) mvn appengine: update

Ich hoffe, diese Arbeit um Ihnen helfen könnte!

Verwandte Themen