OAuth教程--授权列表与撤销
本文是oauth.com上的教程的翻译。(原文地址)
授权列表
一旦用户开始授权多个应用程序,让许多应用程序访问其帐户,就有必要提供一种方法来允许用户管理具有访问权限的应用程序。这通常在帐户设置页面或帐户隐私页面中呈现给用户。
OAuth 2.0规范中没有任何内容要求用户能够撤销访问权限,或者对如何执行此操作的建议,因此我们将查看几个主要的API提供商,以获取有关如何实现此目的的灵感。
大多数提供商都有一个页面,其中列出了用户授权其帐户的所有应用程序。通常会显示有关应用程序的一些信息,以及用于向用户提供有关此应用程序何时以及为何具有访问权限的上下文的信息。
谷歌
Google会在https://security.google.com/settings/security/permissions
上提供您在帐户中授权的应用程序列表。
该列表显示应用程序图标,名称以及授予应用程序范围的摘要。单击其中一个将展开以显示更多详细信息。
此视图提供了已授予范围的更详细列表,以及您授权应用程序的日期。
Twitter在https://twitter.com/settings/applications
上提供了您授权的应用程序列表。
Twitter显示授予的范围(只读,读/写,读/写/直接消息),以及应用程序是否可以看到您的电子邮件地址。该列表包括您授权申请的日期。这使用户可以轻松地从他们暂时未使用的应用程序中撤消凭据。
GitHub
GitHub在https://github.com/settings/applications
上提供了您授权的应用程序列表。
GitHub提供的列表包括上次使用应用程序的描述,以便您了解是否可以安全地撤销应用程序的授权(如果它在一段时间内没有使用过)。
单击应用程序可提供有关该应用程序访问权限的更多详细信息。
在这里,您可以看到应用程序对您帐户的权限(范围)。
您可以在此处找到指向其他服务授权页面的链接。
撤销访问权限
您可能需要撤销应用程序对用户帐户的访问权限的原因有几个。
- 用户明确希望撤销应用程序的访问权限,例如,如果他们在授权页面上找到了他们不再想要使用的应用程序
- 开发人员想要撤消其应用程序的所有用户令牌
- 开发者删除了他们的申请
- 您作为服务提供商已确定应用程序已被盗用或恶意,并希望禁用它
根据您实现生成访问令牌的方式,将用不同的方式撤销他们。
令牌数据库
如果将访问令牌存储在数据库中,则撤销属于特定用户的所有令牌相对容易。您可以轻松编写查找和删除属于该用户的令牌的查询,例如查找令牌表中的令牌user_id。假设您的资源服务器通过在数据库中查找它们来验证访问令牌,那么下次被撤销的客户端发出请求时,其令牌将无法验证。
自编码令牌
如果授权服务器发出自编码令牌,则撤销对特定应用程序的访问会稍微困难一些。
如果您有一个真正的无状态机制来验证令牌,并且您有资源服务器正在验证令牌而不与另一个系统共享服务,那么唯一的选择是等待所有未完成的令牌过期,并阻止应用程序生成新令牌。这是当您使用自编码令牌时,使用极短期令牌的主要原因。
由于没有使单个访问令牌无效的机制,因此您需要使特定用户的应用程序刷新令牌无效。这样,下次应用程序尝试刷新访问令牌时,将拒绝对新访问令牌的请求。