2015-02-23 6 views
12

Es gibt einige Beispiele für die Verwendung von https://github.com/golang/oauth2, aber keine davon deckt die Verwendung von Aktualisierungstoken ab. Ich habe einige Ansätze ausprobiert, aber ich bin immer noch nicht zufrieden mit meinen Ergebnissen.Umgang mit Aktualisierungstoken in golang/oauth2 client lib

Gibt es einen Beispielcode, oder vielleicht kennen Sie ein Projekt unter Github mit als Beispiel nehmen?

+1

Von diesem Gist (https://gist.github.com/jfcote87/89eca3032cd5f9705ba3#file-gistfile1-go-L26-L30) scheint es, dass, ja, Sie sollten das Token aus Ihrer Datenbank abrufen und es als '* oauth2.Token'. Die Definition der Token-Struktur finden Sie hier: https://github.com/golang/oauth2/blob/master/token.go#L25-L49. Links und weitere Diskussion hier: https://github.com/golang/oauth2/issues/84 – Intermernet

+1

Auch das kann von Interesse sein "Client gibt einen HTTP-Client mit dem bereitgestellten Token zurück. Das Token wird bei Bedarf automatisch aktualisiert. " von https://godoc.org/golang.org/x/oauth2#Config.Client – Intermernet

+1

Danke @Intermernet! Ich werde es heute Abend testen, aber im Moment sehe ich die Lösung für mein Problem. Während mein Code relativ ähnlich aussieht, habe ich nicht nach der Gültigkeit des Tokens gesucht, daher war der erste Aufruf nach Ablauf immer fehlgeschlagen. – Andrew

Antwort

10

Sie müssen sich keine Gedanken über das Aktualisieren von Tokens machen, bis Sie den Parameter Expiry gespeichert haben. Nachdem sie Objekt der 'Token', speichern Sie die folgenden in Ihrer Datenbank:

token.AccessToken, token.RefreshToken, token.TokenType und token.Expiry

beim Abrufen, konstruieren die Token-Objekt wieder die oben genannten Parameter:

token := new(oauth2.Token) 
token.AccessToken = {{ From DataBase }} 
token.RefreshToken = {{ From DataBase }} 
token.Expiry = {{ From DataBase }} 
token.TokenType = {{ From DataBase }} 

und dann erhalten Sie Ihren HTTP-Client:

config.Client(ctx, token)

Dies wird die Aktualisierung des Tokens behandeln. Auszug (weitere Informationen: Golang oauth2 client):

Der Client gibt einen HTTP-Client mit dem bereitgestellten Token zurück. Das Token wird bei Bedarf automatisch aktualisiert.

Der einzige Nachteil ist, dass das aktualisierte Zugriffstoken nicht zurückgegeben wird. Aber es funktioniert! Google hat keine Beschränkungen dafür, wie oft das Aktualisierungstoken verwendet wird.

+0

Sie haben Recht. Ich bin nach ein paar Versuchen zu diesem Code gekommen und es funktioniert mehr oder weniger. Was die Aktualisierung betrifft, werde ich meine Client-Struktur mit einer Art Hook erstellen. – Andrew

+0

Wie auch immer, das ist ein Muss für meinen Fall, da der Server sowohl accessToken als auch refreshToken aktualisiert, also sollte ich die Aktualisierung auffangen und sofort in der Datenbank speichern. – Andrew

+0

hey @Andrew Ich bin auf der Suche nach der gleichen Sache, was hast du getan, um Refresh Tokens zu speichern und ältere Access Tokens zu ersetzen? – macguy