我想知道Google Drive API是否有任何类型的"灾难恢复"系统?例如,在紧急情况下,如果我的应用程序中的令牌暴露,我需要能够在不提示每个用户再次接受/重新接受权限的情况下重新创建令牌,这样用户的信息就不会泄露。我真的需要这样,以便为我的用户提供一个安全的环境。
例如,我在Box API中看到它们提供了一个访问令牌和一个刷新令牌。每次访问令牌到期时,它们都会告诉您通过刷新令牌请求一个新令牌,在这种情况下,访问令牌和刷新令牌都会更改。这对我们来说是理想的,因为我们可以运行一个脚本为我们拥有的每个帐户请求新的令牌,然后将新令牌存储在我们的数据库中。
谨致问候,Andrew
注意:我假设您的应用程序正在使用Google的OAuth 2.0 Web服务器应用程序流,并且您没有使用服务帐户
当您第一次要求用户授权您的应用程序(通过将其重定向到OAuth同意页面)并包含access_type=offline
参数时,您将同时收到access_token
和refresh_token
。该refresh_token
在被用户访问其"帐户设置"页面或您的应用程序调用revoke
方法撤销之前一直有效。即使您的应用程序稍后收到同一用户的另一个refresh_token
,前一个refresh_token在被撤销之前仍然有效。
因此,如果您有理由相信用户的refresh_token
已经暴露,那么最安全的做法是撤销它,并再次将用户发送到OAuth流(提供approval_prompt=force
以确保您获得另一个refresh_token
)。
Google的OAuth2还为您提供了access_token
和refresh_token
,刷新令牌用于生成新的访问令牌。
但是,如果需要撤销刷新令牌,则用户需要重新进行身份验证。
然而,真正的根本问题是,如果安全令牌暴露会发生什么?(提前考虑一下对你来说很好。)
你需要做三件事:
-
立即撤销令牌。
-
立即告诉用户他们的帐户被破坏了。
-
在您确定漏洞已得到修复后,请用户重新进行身份验证。
为什么我说你需要?
-
在我看来,你有道德义务告诉他们,攻击者可能已经访问了他们的数据。
-
在某些地区,你可能有法律义务。
-
谷歌API条款规定,您必须立即向用户报告,否则您可能会永久失去对API的访问权限。
提前制作多个刷新令牌似乎是个坏主意:
-
你以为攻击者会合作只拿走一个代币?
-
用户将需要重复验证才能生成它们。
-
无论如何,您都需要通知用户。