2013-12-12 13 views
8

Wenn ich einen Benutzer erzwinge, meine Anwendung ein zweites Mal zu autorisieren, mithilfe von approval_prompt=force, wie kann ich Google den Benutzer die vollständige Liste der Berechtigungen meiner App zeigen anfordern?Google OAuth2 Reauthorization fehlt Berechtigungen auf der Zustimmungsseite

Details:

Ich habe eine Web-Anwendung, die eine Reihe von Google-API-Berechtigungen, einschließlich access_type=offline anfordert. Das erste Mal, dass ich es genehmigen, zeigt es die richtige Zustimmung Seite, alle Berechtigungen Auflistung, die wie folgt aussieht:

first time Google OAuth2 consent page

Später habe ich den Benutzer senden mit den gleichen Parametern mit Google, zu genehmigen zurück. Das zweite Mal, es zeigt nur „Offline-Zugriff haben“:

enter image description here

Warum ist es nicht der Benutzer alle Berechtigungen zeigen? Gibt es eine Möglichkeit, es zu zwingen, den Benutzer ein zweites Mal nach allen Berechtigungen zu fragen? Warum zeigt es jetzt zum ersten Mal "Offline-Zugriff"?

Unsere Benutzer finden es verwirrend, dass unsere App keine tatsächlichen Berechtigungen verlangt, also würde ich lieber nur den ersten Zustimmungsbildschirm anzeigen.

Die vollständigen Parameter für die Anforderung, die ich mache, sind wie folgt. URL:

https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force&client_id=1039955146864.apps.googleusercontent.com&redirect_uri=http://localhost:8081/sync/google/callback&response_type=code&scope=openid%20email%20https://www.googleapis.com/auth/admin.directory.group.readonly%20https://www.googleapis.com/auth/admin.directory.group.member.readonly%20https://www.googleapis.com/auth/admin.directory.user.readonly&state=480704597031619284232891277399900450622 

Parameter ausgebrochen:

access_type:offline 
approval_prompt:force 
client_id:1039955146864.apps.googleusercontent.com 
redirect_uri:http://localhost:8081/sync/google/callback 
response_type:code 
scope:openid email https://www.googleapis.com/auth/admin.directory.group.readonly https://www.googleapis.com/auth/admin.directory.group.member.readonly https://www.googleapis.com/auth/admin.directory.user.readonly 
state:480704597031619284232891277399900450622 
+0

Wir haben das gleiche Problem in nicht UI-Thread oder asyntask aufgerufen werden. Hast du schon etwas herausgefunden? –

Antwort

8

Wir starteten inkrementelle Auth und dies ist das so vorgesehen.

http://googleplusplatform.blogspot.com/2013/12/google-sign-in-improvements11.html

Die Idee ist, wenn ein Benutzer bereits die Berechtigungen eine App erteilt hat, besteht keine Notwendigkeit, die gleichen Berechtigungen zu zeigen und den Benutzer auffordern, zu genehmigen.

Wenn Sie Ihre Anwendung richtig schreiben, sollte diese Situation nicht auftreten. Wenn Sie einen Offline-Code (Refresh-Token) anfordern und auf Ihrem Backend speichern, sollten Sie nicht mehr danach gefragt werden, es sei denn, Sie müssen einige neue Bereiche/Berechtigungen erhalten. Sie sollten das Aktualisierungstoken verwenden, das Sie in der Zukunft gespeichert haben. Wenn Sie das Zugriffstoken nur benötigen, wenn sich der Benutzer auf Ihrer Site befindet, können Sie mit anderen Flows ein Zugriffstoken anfordern, ohne dass der Benutzer eine Genehmigungsseite sieht.

+0

Danke für die Erklärung. Scheint vernünftig, obwohl nicht das, was ich erwartet habe mit "approval_prompt = force" (ich denke, ich habe erwartet, dass es wieder ALLE Berechtigungen verlangt). Ich werde meine App reparieren, um etwas anderes zu tun. –

+1

"Wenn Sie Ihre Anwendung richtig schreiben, sollte diese Situation nicht auftreten" ... Wie können wir den Fall behandeln, in dem wir ein Aktualisierungstoken erhalten, aber dann einen Fehler haben, der verhindert, dass es gespeichert wird? Wir müssen dem Benutzer beim erneuten Versuch eine verwirrende Berechtigung "Offlinezugriff" geben. –

+0

Ja, das ist eine Situation, in der wir besser vorgehen und eine aussagekräftigere Seite zeigen müssen. Wir überlegen, a) alle Bereiche erneut anzuzeigen, b) eine Nachricht zu zeigen und den Benutzer zu bitten, nur das Konto zu bestätigen, mit dem er sich anmelden möchte. Beispiel: Wählen Sie das Konto aus, das Sie für die Anmeldung in dieser Anwendung verwenden möchten. Dies kann Situationen bereinigen, in denen Benutzer in mehreren Konten angemeldet sind und sich möglicherweise mit einem anderen Konto anmelden möchten. – nvnagr

0

Sie müssen das Zugriffstoken widerrufen und sich abmelden. Wenn Sie sich dann anmelden, wird die Erlaubnis angezeigt.

public static void RevokeAcess(String accessOrRefreshToken) throws ClientProtocolException, IOException 
{ 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost("https://accounts.google.com/o/oauth2/revoke?token="+accessOrRefreshToken); 
    client.execute(post); 
} 

Dieses Netzwerk Prozess sollte

Verwandte Themen