2015-02-23 189 views
12

使用https://github.com/golang/oauth2的例子很少,但它們都不涉及刷新令牌的使用。我嘗試了一些方法,但我仍然不滿意我的結果。如何在golang/oauth2客戶端庫中處理刷新令牌

是否有任何示例代碼,或者您可能知道一些項目在Github使用oauth2 lib作爲示例?

+1

從這個要點(https://gist.github.com/jfcote87/89eca3032cd5f9705ba3#file-gistfile1-go-L26-L30)它似乎是,你應該從你的數據庫檢索令牌並返回它爲* oauth2.Token'。令牌結構定義在這裏:https://github.com/golang/oauth2/blob/master/token.go#L25-L49。鏈接和進一步的討論在這裏:https://github.com/golang/oauth2/issues/84 – Intermernet 2015-02-24 06:33:01

+1

此外,這可能是有趣的「客戶端使用提供的令牌返回HTTP客戶端。令牌將根據需要自動刷新。 「來自https://godoc.org/golang.org/x/oauth2#Config.Client – Intermernet 2015-02-24 06:45:48

+1

謝謝@Intermernet!我會在今晚測試它,但現在我看到了解決我的問題的方法。雖然我的代碼看起來比較相似,但我沒有檢查令牌的有效性,因此在到期後首次調用總是失敗。 – Andrew 2015-02-24 10:00:22

回答

10

在存儲參數Expiry之前,您無需擔心刷新標記。得到 '令牌' 對象後,存儲在數據庫中的以下內容:

token.AccessTokentoken.RefreshTokentoken.TokenTypetoken.Expiry

而獲取,構建令牌對象再次使用上述參數:

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

然後得到你的http客戶端:

config.Client(ctx, token)

這將處理刷新令牌。摘錄(更多信息:Golang oauth2 client):

客戶端使用提供的令牌返回HTTP客戶端。該令牌將根據需要自動刷新。

唯一的缺點是不刷新訪問令牌。但它的作品! Google對使用刷新令牌的次數沒有限制。

+0

你說得對。我經過幾次嘗試才找到這個代碼,它或多或少地起作用。至於更新,我想我會用某種鉤子構建我的Client結構。 – Andrew 2015-03-12 09:15:09

+0

無論如何,這是我的情況必須的,因爲服務器刷新accessToken和refreshToken,所以我應該趕上刷新並立即將其存儲在數據庫中。 – Andrew 2015-03-12 09:16:25

+0

嗨@Andrew我有點想做同樣的事情,你最終做了什麼來存儲刷新令牌並替換舊的訪問令牌? – macguy 2015-06-09 02:37:38

相關問題