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

dsc*_*chn 12 oauth-2.0

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

我检索带有"读取"范围的访问令牌"f482c829".如果我改变主意,现在想要读取+写入权限并再次使用"读取"和"写入"范围进行授权,您是否:

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

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

不幸的是,OAuth2规范(截至草案12)并没有解决任何问题.

小智 5

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

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

在Twitter的情况下(也许你的情况),两者似乎都可以.

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

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