【问题标题】:Tokens exposed - refresh them?令牌暴露 - 刷新它们?
【发布时间】:2015-11-16 22:52:07
【问题描述】:

我想知道 Google Drive API 是否有任何类型的“灾难恢复”系统?例如,在紧急情况下,如果我的应用程序中的令牌被暴露,我需要能够重新创建令牌,而无需再次提示每个用户接受/重新接受权限,这样用户的信息就不会被泄露。我真的需要这个来为我的用户提供一个安全的环境。

例如,我在 Box API 中看到它们提供了访问令牌和刷新令牌。每次访问令牌过期时,他们都会告诉您通过刷新令牌请求一个新令牌,在这种情况下,访问令牌和刷新令牌都会更改。这对我们来说是理想的,因为我们可以运行一个脚本来为我们拥有的每个帐户请求新令牌,然后将新令牌存储在我们的数据库中。

问候, 安德鲁

【问题讨论】:

  • 什么是威胁模型?您希望代币如何暴露?
  • 这是一种潜在情况,有人可以访问刷新令牌,我想确保我可以让用户继续安全可靠地工作,而无需再次提示他们授予权限
  • 这真是个坏主意。见下文。

标签: google-drive-api


【解决方案1】:

注意:我假设您的应用程序使用的是 Google 的 OAuth 2.0 Web Server Applications flow,而您没有使用服务帐户。

当您首次要求用户授权您的应用程序(通过将他们重定向到 OAuth 同意页面)并包含 access_type=offline 参数时,您将同时收到 access_tokenrefresh_tokenrefresh_token 是有效的直到它被撤销,无论是通过用户访问他们的帐户设置页面还是通过您的应用程序调用revoke 方法。即使您的应用程序稍后收到同一用户的另一个refresh_token之前的 refresh_token 仍然有效,直到被撤销

因此,如果您有理由相信用户的 refresh_token 已暴露,最安全的做法是撤销它并再次将用户发送到 OAuth 流程(提供 approval_prompt=force 以确保您再找一个refresh_token)。

【讨论】:

  • 所以我可以创建多个刷新令牌,然后撤销旧的?这将是我建议的方案的理想解决方案
  • 是的,我确实使用 OAuth 2.0
【解决方案2】:

Google's OAuth2 also gives you both an access_token and a refresh_token,刷新令牌用于生成新的访问令牌。

但是,如果需要撤销刷新令牌,则用户需要重新进行身份验证。


但真正的根本问题是,如果安全令牌被暴露会发生什么? (有利于您提前考虑这一点。)

你需要做三件事:

  • 立即撤销令牌。

  • 立即告诉用户他们的帐户遭到入侵。

  • 在您确定漏洞已得到修复后,请要求用户重新进行身份验证。

为什么我说你需要

  • 在我看来,您有道德义务告诉他们攻击者可能已经获得了他们数据的访问权限。

  • 在某些地区,您可能有法律义务。

  • Google API terms 说您必须立即向您的用户报告,否则您可能会永久失去对 API 的访问权限。

提前制作多个刷新令牌似乎是个坏主意:

  • 您假设攻击者会合作获取一个令牌?

  • 用户需要反复进行身份验证才能生成它们。

  • 无论如何你都需要通知用户。

【讨论】:

  • 没有办法在不重新认证的情况下撤销它并创建一个新的?
猜你喜欢
  • 2020-06-12
  • 2017-04-26
  • 2011-12-19
  • 1970-01-01
  • 2017-06-02
  • 2021-11-16
  • 2021-08-20
  • 2013-06-29
  • 2022-10-31
相关资源
最近更新 更多