簡體   English   中英

自動刷新 Google OAuth2 令牌

[英]Refresh Google OAuth2 Token Automatically

我正在嘗試將照片上傳到 Google Drive 功能(使用 Google Drive API 和 GIS)實現到我正在開發的 Web 應用程序中,但似乎無法弄清楚如何讓用戶的身份驗證時間超過訪問令牌的指定到期時間(1 小時),無需提示用戶或打開彈出窗口。

https://github.com/googleworkspace/browser-samples/blob/master/drive/quickstart/index.html提供的示例代碼強制用戶單擊“刷新”按鈕以獲取新令牌,但這意味着我將不得不強制用戶每小時登錄一次,這並不理想(因為用戶可能一次使用該應用程序的時間可能超過一個小時)。

根據https://developers.google.com/identity/oauth2/web/guides/use-token-model#token_expiration ,這似乎是故意的。 然而,在環顧一番之后,我發現可以使用刷新令牌來生成一個新的訪問令牌,該令牌會在一個小時后過期。 假設您每 45 分鍾左右生成一個新令牌(實際上是另一篇 Google 文章建議的,但我現在似乎找不到它),那么您永遠不必擔心這種重新身份驗證。

但是,我不知道如何獲取刷新令牌。

未收到 Google OAuth 刷新令牌建議發送access_type=offline作為查詢參數,但我沒有使用任何重定向,並且上述initTokenClientrequestAccessToken文檔沒有提及access_type參數。

我得到的最接近的是定期調用requestAccessToken方法,但這仍然會彈出一個彈出窗口供用戶再次登錄,這是我試圖避免的。 即使使用requestAccessToken({ prompt: "" })仍然會彈出這個彈出窗口,但它至少在沒有任何用戶輸入的情況下登錄。 有沒有辦法完全禁用這個彈出窗口?

最壞的情況是,我強迫用戶每小時重新驗證一次,但這似乎會導致不太理想的用戶體驗。 任何幫助表示贊賞。

我已經逐步瀏覽了 GIS 庫代碼,並且可以確認 prompt='' 和 prompt='none' 沒有按照 requestAccessToken 文檔所暗示的方式實現。 GIS 總是打開一個彈出窗口。 prompt 參數僅更改彈出窗口中發生的情況。 GIS 中也沒有令牌存儲或緩存功能,僅在彈出窗口中。

當前的提示參數行為是根據OAuth 2.0 流量比較表設計的。 僅當用戶調用需要它的操作時才應刷新訪問令牌。

這給我們留下了非常糟糕的 UX 體驗,彈出窗口必須每小時左右短暫地打開和關閉。 另一種方法是使用授權碼流。 但它需要實現一種機制,將訪問令牌從后端發送回客戶端。

按鈕流和同意彈出行為是有意為瀏覽器獲取訪問令牌的,當將設置提示配置為空字符串時,將禁止在每個請求上彈出用戶: prompt=''

如果您想在用戶不在場或不得不通過手勢觸發令牌請求(例如按下按鈕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM