2016-03-31 13 views
0

Rückkehr habe ich ein Authentifizierungsmodul zu meiner Web-Anwendung zu entwickeln, die mit Angular2 mit der Oauth2 Google+ API entwickelt wird, hier das Problem der Serverantwort Google ist enthält keine Aktualisierungs-Token außer an den access_token, expires_in, token_type, id_token Schlüssel, ich habe versucht, den Zugriff auf meine Anwendung zu widerrufen und versuchen Sie es erneut, aber immer noch das gleiche Problem; hier hinzugefügt werden die Parameter in der POST Abfrage:Google OAuth2 nicht Refresh-Token auf authentcation

code=4/BXlTY3dLzpUMfu4WuapGjn1du6TCVXEt6Wxjf7-EK_E 
    &client_id=429410750270503bndl.apps.googleusercontent.com 
    &client_secret=*****GZe11WEgy9Glg2T 
    &grant_type=authorization_code 
    &redirect_uri=http://localhost:3000/loginplus 
    &access_type=offline 

Das Problem ist, dass in den offiziellen Dokumente, sagte Google, dass es refresh_token ein zurückgeben sollte, aber ich sehe es nicht, ich habe nur die oben genannten, hier ist die Antwort

{ 
access_token: "ya29..tgLONwAAje6nNWmqV7bMJ_xBQQVS5ZUpXK7m5rCiJwIeeQZTw70fYjOGoX3Z9ZBMvA", 
token_type: "Bearer", 
expires_in: 3597, 
id_token: "eyJhbGciOiJSUzI1NiIsImtpZCI6IjA3YjlhZDg5ZWFhMTQxNW…bMdi_TtH998qaSdpL05EYG3_1bRijX6AFQwhUoe9ILJeOZM5w" 
} 

Ich suchte viel, aber keine der Antworten half mir, irgendeine Hilfe ??

Antwort

0

tl; dr approval_prompt = Kraft ist in diesem Fall benötigt man ein Aktualisierungs-Token zu erhalten.

Details:

access_type = ist offline immer in der Anforderung benötigt, wenn man einen Aktualisierungs-Token erhalten möchte. (Die andere Antwort von PierreDuc ist falsch) Aber manchmal erhalten Sie möglicherweise kein Aktualisierungs-Token, nachdem Sie den "Autorisierungscode", den Sie erhalten haben, ausgetauscht haben. Warum? Um ein neues Refresh-Token zurückzugeben Wir möchten, dass ein Benutzer seine Zustimmung erteilt. Wenn der Nutzer Ihrer App bereits eine Offline-Zustimmung erteilt hat, wissen wir, dass die App bereits über ein Aktualisierungstoken (mindestens eins) verfügt und im Allgemeinen nicht mehr danach gefragt werden sollte. Daher zeigen wir die Genehmigungsseite nicht an und geben einen Code zurück, der nur Zugriffstoken gibt.

Wenn das frühere Aktualisierungstoken irgendwie verloren gegangen ist und Sie es erneut abrufen möchten, wird das Hinzufügen von approval_prompt = force in der Anforderung dem Benutzer eine Genehmigungsseite zeigen und Ihnen auch einen Code geben, der das Aktualisierungstoken enthält.

2

Das Problem mit der Verwendung access_type=offline ist, dass Ihre Anwendung wahrscheinlich einen Autorisierungscode mit einem Benutzer bereits ausgetauscht hat. Wenn dies der Fall ist, hat es beim ersten Aufruf eine response_code zurückgeschickt. Sie sollten diesen Code für die weitere Verwendung gespeichert haben.

Wenn Sie eine neue refresh_token erhalten möchten, müssen Sie den Benutzer erneut um Zustimmung bitten, indem Sie Ihre Anwendung verwenden.

Weitere Referenz lesen this

Und insbesondere diesen wichtigen Teil:

Wichtig: Wenn Ihre Anwendung eine Aktualisierungs-Token erhält, ist es wichtig für die zukünftige Verwendung dieser Aktualisierungs-Token zu speichern. Wenn Ihre Anwendung das Aktualisierungstoken verliert, muss sie den Benutzer erneut zur Zustimmung auffordern, bevor ein anderes Aktualisierungstoken abgerufen wird. Wenn Sie den Benutzer erneut zur Zustimmung auffordern müssen, fügen Sie den Aufforderungsparameter in die Autorisierungscodeanforderung ein, und legen Sie den Wert für die Zustimmung fest.

+0

Es funktioniert nicht: /, Ich dachte, das war wegen der gewährten Zugriff passiert, also habe ich es widerrufen, aber keiner wurde geändert .. –

+0

BTW: Ich denke, dass die 'access_type = offline 'sollte da sein in der' POST aus diesem Grund: https://developers.google.com/identity/protocols/OpenIDConnect#refresh-tokens –

+1

Diese Antwort ist falsch.Bitte überlege, es zu bearbeiten, da es andere verwirrt. access_type = offline ist erforderlich, wenn Sie ein Aktualisierungstoken erhalten möchten. – nvnagr

Verwandte Themen