处理OAuth2实施的访问令牌和范围的最佳实践?

时间:2011-02-16 21:42:07

标签: oauth-2.0

假设我们有一个支持“读取”和“写入”范围的OAuth2实现。

我检索带有“读取”范围的访问令牌“f482c829”。如果我改变了主意,现在想要读取+写入权限并再次使用“读取”和“写入”范围进行授权,那么:

  • 更新现有访问令牌的范围并返回相同的令牌“f482c829”?
  • 如果使用相同的令牌,如果在更新范围之前使用response_type = code,则要求回收访问令牌? (我想是的)
  • 更新现有访问令牌的范围并返回刷新后的令牌“zf382nL”?
  • 创建一个全新的令牌,留下“f482c829”并且其范围保持不变?

如果每个范围每次都创建一个新令牌,则最终必须为每个授权存储多个访问令牌,并且在任何地方都存储不同的权限。我一直犹豫要不要那样实施。

OAuth2规范(截至草案12)遗憾的是没有解决任何问题。

2 个答案:

答案 0 :(得分:5)

在facebook的情况下,资源服务器与授权服务器基本相同。 所以他们做“使用现有令牌”的方式。 它允许用户禁用facebook.com网站上的每个范围。 关于刷新令牌,您无需建立新的刷新令牌。 (当然你可以这样做。) 现有的刷新令牌也将与所有范围相关联。

在谷歌的情况下(也许是Yahoo!),资源服务器与授权服务器完全不同。 许多资源服务器(Docs,Buzz等)接受访问令牌建立的单一授权服务器。 在这种情况下,“建立新令牌”的方式似乎更好。

在推特的情况下(也许是你的情况),两者似乎都没问题。

另外,无论如何,当用户撤销客户端访问权限时,您需要撤消客户端的所有令牌。 用户不是在撤销“令牌”而是“客户”。

由于开发人员应预先注册redirect_uri,在网站和移动设备上使用相同的客户端凭据似乎都很棘手。 因此,我建议在这种情况下要求开发人员使用不同的客户端凭据。

答案 1 :(得分:0)

假设应用程序的一个客户端(移动)需要只读访问权限,而另一个客户端(网站)也需要写入。这将要求客户端能够决定令牌请求的范围,从而使提供者能够存储具有不同范围的多个令牌。

但是,如果要扩展现有令牌的范围,则由您决定。这意味着每个应用程序可以保留一个范围。这也可以轻松撤消用户对应用程序的访问。