2017-03-09 3 views
0

Ich bin in der Lage der oauth Verfahren zu durchlaufen, ein Token zu erhalten, die ich in der Lage bin erfolgreich mit GDrive zu interagieren können. Das Token verfügt über ein AccessToken aber kein RefreshToken. Wie bekomme ich ein RefreshToken? DieseGolang Google Drive OAuth2 Rückkehr Nicht Refresh Token

ist in einem Web-Service. Hier ist der Code, der die oauth Genehmigungsverfahren einleitet:

// Set up a configuration. 
oauthconfig := &oauth2.Config{ 
    ClientID:  XXX, 
    ClientSecret: XXX, 
    RedirectURL: "https://MYDOMAIN/gdrivecb", 
    Scopes:  []string{"https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/drive"}, 
    Endpoint: oauth2.Endpoint{ 
     AuthURL: "https://accounts.google.com/o/oauth2/auth", 
     TokenURL: "https://accounts.google.com/o/oauth2/token", 
    }, 
} 
url := oauthconfig.AuthCodeURL(MYSCOPEDATA, oauth2.AccessTypeOffline) 
http.Redirect(w, r, url, http.StatusFound) 

Hier ist der relevante Code, der aufgerufen wird, wenn/gdrivecb genannt wird (OAuthConfig ist das gleiche wie zuvor, Code ist die code URL-Parameter:

token, err = oauthconfig.Exchange(nil, code) 

Dieses Token enthält ein AccessToken, aber kein RefreshToken, und es funktioniert für eine Stunde (die Länge von Expiry), aber funktioniert danach nicht mehr

+0

Wenn ein Code abgerufen wird, '' access_type = offline'' benötigt wird, um zum Abrufen des Code in der URL enthalten sein. Die URL für den Code abzurufen ist '' https: //accounts.google.com/o/oauth2/v2/auth response_type = code & client_id = ### & redirect_uri = ### I & scope = ### & access_type = offline'' Die Detailinformationen sind https://developers.google.com/identity/protocols/OAuth2WebServer – Tanaike

+0

die AuthCodeURL() Funktion mit oauth2.AccessTypeOffline fügt ‚access_type = offline‘ an die Umleitungs-URL, so dass bereits passiert. –

+0

Es tut mir leid, ich konnte nicht helfen. – Tanaike

Antwort

0

Das Problem war nicht mit dem Code, und der Code funktioniert, wenn Sie nie haben gegangen Thr ohne den Autorisierungsprozess vorher. Das Problem tritt auf, wenn Sie den Autorisierungsprozess ein zweites Mal durchlaufen. Ihnen werden die angeforderten Berechtigungen nicht angezeigt, und ein Aktualisierungstoken wird nicht gesendet. Sie müssen erzwingen, dass der Berechtigungsdialog erneut angezeigt wird. Um dies zu tun, fügen Sie approval_prompt=force auf die Umleitungs-URL.

Verwandte Themen