通过OAuth 2.0令牌撤销提高帐户安全性

Posted 谷歌开发者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过OAuth 2.0令牌撤销提高帐户安全性相关的知识,希望对你有一定的参考价值。


通过OAuth 2.0令牌撤销提高帐户安全性


文|Google Apps 产品主管 Michael Winser 和 Google Apps 开发顾问 Wesley Chun 


为了更好地保护用户安全,我们为自 2016 年 10 月 5 日起生效的企业 Gmail 用户提高帐户安全性。目前有一项新政策即将生效,根据此政策,Google Apps 网域中的用户在此日期或此日期之后 更改其密码时,将会导致使用基于 Gmail 的授权范围访问用户邮箱的应用被撤销 OAuth 2.0 令牌。请注意,在此日期,用户不会注意到任何特定的变化,而且其应用也会继续正常工作。只有当用户在此日期之后更改密码时,其 Gmail 相关的令牌才会变为无效状态。 


开发者应修改其应用,以处理因撤销的令牌而导致的 HTTP 400 或 401 错误代码,并提示其用户再次完成 OAuth 流程以便为这些应用重新授权,使其能够继续访问用户邮箱(更多详细信息,请参阅下文)。去年年底,我们宣布对我们的安全政策进行了一项类似的计划性更改,此项更改影响了一组更为广泛的授权范围。之后我们决定不再向 Apps 客户继续推行该项更改,并开始开发上述影响范围较小的更新内容。 



什么是撤销的令牌? 
撤销的 OAuth 2.0 令牌不再提供用户资源的访问权限。任何时候在 API 调用中尝试使用撤销的令牌都会导致错误。现有的任何令牌字符串将不再包含任何值,并且应该将其舍弃。应修改访问 Google API 的应用,以处理失败的 API 调用。 

令牌撤销本身并不是一项新功能。一直以来,用户都能在安全检查中撤销应用的访问权限,Google Apps 管理员也能在管理控制台中执行相同的操作。不仅如此,长期未使用的令牌也一直遵循到期或撤销要求。我们对安全政策所做的这项更改可能会增加应用所见的令牌撤销率,因为在某些情况下,系统现在会自动执行该过程。 


哪些 API 和范围会受到影响? 
为实现此政策的安全优势并尽量减少给管理员和最终用户带来的困扰,我们决定将其应用范围限制为仅限邮件范围,并且不包括 Apps 脚本令牌。通过 Google Apps Marketplace 安装的 Apps 也不受令牌撤销的限制。此项更改一经生效,Apple Mail 和 Thunderbird 等第三方邮件应用以及使用多个范围(其中至少包括一个邮件范围)的其他应用在重设密码时都会停止访问数据,直至被授予新的 OAuth 2.0 令牌。您的应用需要检测这一情形,通知用户您的应用已丧失用户帐户数据的访问权限,并提示用户再次完成 OAuth 2.0 流程。 

此项政策更改也包括移动邮件应用。例如,在 ios 上使用原生邮件应用的用户在更改其密码后,必须使用其 Google 帐户凭据进行重新授权。第三方移动邮件应用的这一新行为与 iOS 和 android 上的 Gmail 应用的当前行为一致,后者在重设密码时也要求进行重新授权。 


如何确定我的令牌是否已被撤销? 

当用户更改其密码时,短期访问令牌和长期刷新令牌都会被撤销。如果使用撤销的访问令牌访问 API 或生成新的访问令牌,将会产生 HTTP 400 或 401 错误。如果您的应用使用库来访问 API 或处理 OAuth 流程,则可能以异常的形式引发这些错误。有关如何捕获这些异常的信息,请查阅库文档。注意:有多种原因可能导致 HTTP 400 错误,其中因撤销的令牌而导致的 400 错误的有效载荷预期具有以下类似的形式: 


{
 "error_description": "Token has been revoked.", 
 "error": "invalid_grant"
}


我的应用应如何处理撤销的令牌? 
此项更改强调应该将令牌撤销视为正常情况,而不是错误情形。您的应用应该能够预见并检测到该情况,并且应该优化您的 UI 以便恢复令牌。 

为确保您的应用能够正常工作,我们建议执行以下操作: 
  • 针对可检测撤销的令牌的 API 调用和令牌刷新操作添加错误处理代码。

  • 在检测到撤销的令牌时,停用任何依赖于 Google API 访问的应用功能,直至用户可以为您的应用重新授权。例如,暂停任何使用可能受影响的 Google API 来同步数据的重复性后台作业。

  • 通知用户该访问权限已被撤销,并提示用户重新授予访问其资源的权限。

  • 如果您的应用与用户 直接 交互,则需要提示用户重新授权,即给用户发送一封电子邮件和/或在用户下次打开您的应用时向其显示一则警报。

  • 但如果您的应用 独立于用户 运行,例如某个使用 Gmail API 的后台应用,则需要通过电子邮件或其他某种机制来通知用户。

  • 提供优化的 UI 用于重新授予访问权限。避免用户在查找原始设置时进行大量的应用浏览操作。

  • 请注意,无论令牌的撤销方式如何,撤销的令牌都会导致类似的错误消息。您的消息传递不应假定令牌是由于密码更改而被撤销。


如果您的应用使用增量授权在同一令牌中累积多个范围,则应跟踪给定用户已启用的功能和范围。最终,如果您的应用请求并获得了多个范围的授权,并且其中至少有一个是邮件范围,那么撤销该令牌将意味着需要提示您的用户为 最初授权的所有 范围重新授权。 


许多应用使用令牌来执行后台或服务器到服务器 API 调用。用户希望此后台活动能够继续可靠地运行。由于此政策更改也会影响 这些 应用,这使得请求重新授权的提示通知变得更加重要。 

简而言之,经过正确配置的应用通常应该能够处理无效的令牌,不论这些令牌已到期、不存在还是作为正常情况被撤销。我们建议开发者进行任何必要的更改,以便为其用户提供可能的最佳体验。



以上是关于通过OAuth 2.0令牌撤销提高帐户安全性的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式撤销 Google 帐户的 OAuth 令牌

oauth 2.0、JWT、Spring 安全、微服务

OAuth 2.0 在哪里安全地存储访问令牌以供长期使用

REST API 的安全认证,从 OAuth 2.0 到 JWT 令牌

Oauth 2.0 隐式授权有多安全?

OAuth 2.0 授权介绍和使用