我正在开发一个通过 OAuth 授权的云存储 API。第三方应用程序的用户可以允许该应用程序通过我们的 RESTful API 访问他们的文件/数据。
目前,我们正在限制第三方应用程序访问用户帐户一次。例如,Access Token 表在消费者列和用户列上有一个 UNIQUE。乍一看,这是有道理的,因为永远不应该将用户发送到我们的服务以两次授权第三方应用程序,因为第三方已经知道他们的用户已经绑定到我们的服务并且不需要重新- 授权。
但是,如果该用户在第三方应用程序上有两个帐户,并且他们希望该应用程序在我们的服务上连接到他们的单个帐户两次怎么办?鉴于 Reddit 等服务上的多个帐户普遍存在,这似乎很可能。
以下是我迄今为止提出的可能的解决方案,但没有一个是完美的:
- 在第二个身份验证请求期间显示错误:这对用户来说似乎是一种令人沮丧的体验,是一种“逃避”。
- 删除以前的令牌:这可能会惹恼用户,因为他们以前的帐户停止工作。即使我们显示警告,也可能很难解释到底发生了什么。
- 返回与第一个请求相同的访问令牌:每次请求访问时,也会传递一组权限。第二个请求的权限可能与第一个请求的权限不同。此外,不确定这是否会违反 OAuth 规范,因为第二个生成的请求令牌未正确绑定到访问令牌。
- 允许生成两个:这会令人困惑,因为当用户访问他们的屏幕上满是授权应用程序来撤销一个时,他们不知道哪个授权与哪个第三方帐户相关联。当生成请求令牌以识别不同的身份验证时,我们可以要求一个可选的第三方
username
参数(我们目前已经要求一个非 OAuth 标准permission
参数)。但是,这似乎不会被 99% 的开发人员使用,并且可能会使应用程序开发更加混乱。
处理这种情况的最佳方法是什么?是否有处理此用例的标准化做法?