2016-04-06 21 views
0

Ich entwickle ein App Engine Java-Programm, das OAuth2 bei der Anmeldung verwendet. Mit anderen Worten, der Benutzer muss die Genehmigung erteilen, bevor er die App verwendet. Ich möchte jetzt die Google Picker-Funktionalität integrieren, ohne sich auf dem Client authentifizieren zu müssen (erneut anfordern).Wie autorisieren Sie Google Picker mit OAuth2 Token von App Engine

Ich habe ein Objekt übergeben (loginInfo ist ein JSON-Objekt) mit dem Token als Eigenschaft.

Während das Token auf der Serverseite einwandfrei funktioniert, bekomme ich auf dem Client einen UnAuthorized 401-Fehler. EDIT Ich sollte erwähnen, dass der Bereich auf der Serverseite alle erforderlichen Berechtigungen für die Ansichten auf der Picker enthält und dass meine Picker Api sowie die Drive API aktiviert ist.

Meine Frage ist jetzt, was wäre der beste Weg, um mit dieser Situation umzugehen? Ist es überhaupt sicher, authToken auf dem Client zu veröffentlichen? Wie kann ich dieses Szenario erreichen, so dass der Benutzer nicht zweimal genehmigt und trotzdem Picker verwendet? Gibt es bessere Lösungen als Picker zum Hochladen auf Drive, Picassa oder andere Google-Dienste?

Antwort

0

Zunächst möchte ich mich entschuldigen, als ich vergessen habe zu erwähnen, dass ich GWT verwendet habe, um die App zu programmieren. Es scheint, dass der Fehler mit der GWT-Ajaxloader-Bibliothek kam; Offensichtlich muss es auf antiquierte Weise zur API rufen. So ist die Lösung für mich war die Anfrage in den HTML-Code zu hart Code wie so

<!-- The Following proves that picker works with oAuth2 --> 
    <script type="text/javascript"> 
     // Use the API Loader script to load google.picker and gapi.auth. 
     function onApiLoad() { 
     gapi.load('picker'); 
     } 
    </script> 
    <script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script> 

Sobald dies geschehen war konnte ich das Picker-Objekt verwendet bereits geladen und im setDeveloperKey() Methode setzen. Jetzt ist alles Soße. Noch eine Einschränkung ... Stellen Sie sicher, dass der AccessKey nicht auf dem Server abgelaufen ist. Auf der Java Api dies durch Überprüfung durchgeführt werden kann, wenn es Credential.getExpiresInSeconds abläuft() Ich habe mich persönlich eine Stunde

if(cred.getExpiresInSeconds() <= 3600){ 
    cred.refreshToken();} 

Und das ist das Update, das für mich gearbeitet hat.