2015-11-16 50 views
0

我想知道Google Drive API是否有適當的「災難恢復」系統?例如,在緊急情況下,如果我的應用程序中的令牌暴露出來,我需要能夠重新創建令牌,而不會提示每個用戶再次接受/重新接受權限,以免用戶信息泄漏。我真的需要這樣做才能爲我的用戶提供安全的環境。暴露的令牌 - 刷新它們?

例如,我在Box API中看到他們提供了一個訪問令牌和一個刷新令牌。每次訪問令牌到期時,他們都會通過刷新令牌請求一個新的令牌,在這種情況下,訪問令牌和刷新令牌都會發生變化。這對我們來說很理想,因爲我們可以運行一個腳本爲我們擁有的每個賬戶申請新的令牌,然後在我們的數據庫中存儲新的令牌。

問候, 安德魯

+0

什麼是威脅模型?你如何期待令牌暴露? – poolie

+0

這是一種潛在的情況,有人可以訪問刷新令牌,並且我想確保我可以讓用戶繼續安全地工作,而無需再次授予權限 – Andrew

+0

這真是一個糟糕的主意。見下文。 – poolie

回答

0

Google's OAuth2 also gives you both an access_token and a refresh_token,並刷新令牌用於生成新的訪問令牌。

但是,如果需要取消刷新令牌,則用戶需要重新進行身份驗證。


真正的根本問題雖然是,如果安全令牌暴露會發生什麼? (適合你提前思考這個)

你需要做三件事情:

  • 立即撤銷令牌。

  • 立即告訴用戶他們的賬戶被破壞。

  • 在確定違規已被糾正後,請求用戶重新進行驗證。

爲什麼我說你需要來?

  • 在我看來,你有道義上的責任告訴他們攻擊者可能獲得了訪問他們的數據的權限。

  • 在某些地區,您可能有法定義務。

  • Google API terms說你必須及時向用戶報告,如果你沒有,你可能永遠失去了API訪問權限。

製作多個刷新令牌事先似乎是一個壞主意:

  • 你假設攻擊者將只取一個令牌合作?

  • 用戶需要重複進行身份驗證才能生成它們。

  • 無論如何你需要通知用戶。

+0

無法撤銷它,並創建一個新的沒有重新驗證? – Andrew

0

注:我會假設你的應用程序正在使用谷歌的OAuth 2.0 Web Server Applications flow和你沒有使用服務帳戶。

當你第一次要求用戶授權您的應用程序(通過將其重定向到OAuth的同意頁),包括access_type=offline參數,您將收到既是access_tokenrefresh_token。那refresh_token有效直到它被撤銷,無論是由用戶訪問他們的帳戶設置頁面或由您的應用程序調用revoke方法。即使您的應用程序稍後收到另一個refresh_token爲同一用戶,以前的refresh_token保持有效,直到撤銷

因此,如果您有理由相信,一個用戶的refresh_token已經暴露,最安全的操作過程將撤銷它,並通過OAuth的流動再次向用戶發送(提供approval_prompt=force,以確保您得到另一個refresh_token )。

+0

因此,我可以創建多個刷新令牌,然後撤銷舊的令牌?這將是我提出的方案 – Andrew

+0

的理想解決方案是的,我確實使用OAuth 2.0 – Andrew