【发布时间】:2011-09-05 15:09:11
【问题描述】:
我们正在构建一个休息服务,我们想使用 OAauth 2 进行授权。 current draft(5 月 19 日的 v2-16)描述了 four grant types。它们是获取授权(访问令牌)的机制或流程。
- 授权码
- 隐式授予
- 资源所有者凭据
- 客户端凭据
看来我们需要支持所有这四个,因为它们有不同的用途。前两个(也可能是最后一个)可以从需要访问 API 的第三方应用程序中使用。授权代码是授权 Web 应用程序的标准方法,该应用程序幸运地驻留在安全服务器上,而隐式授权流将是不能完全保密其凭据的客户端应用程序的选择(例如移动/桌面应用程序、JavaScript 客户端等)。
我们希望自己使用第三种机制来在移动设备上提供更好的用户体验——而不是将用户带到 Web 浏览器中的登录对话框等,用户只需直接在应用程序中输入他或她的用户名和密码并登录。
我们还想使用 Client Credentials 授权类型来获取可用于查看公共数据的访问令牌,不与任何用户关联。在这种情况下,这与其说是授权,不如说是类似于 API 密钥的东西,我们使用它来仅授予已向我们注册的应用程序的访问权限,让我们可以在需要时撤销访问权限。
所以我的问题是:
- 您认为我正确理解了不同资助类型的目的吗?
- 如何对客户凭据保密?在第三种和第四种情况下,我们都需要在客户端的某个位置提供客户端 ID 和客户端密码,这听起来不是一个好主意。
- 即使您使用隐式授权类型并且不公开您的客户端密码,有什么可以阻止另一个应用程序使用相同的授权机制和您的客户端 ID 来模拟您的应用程序?
总而言之,我们希望能够使用来自客户端应用程序的客户端凭据和资源所有者凭据流。这两种流程都需要您以某种方式存储客户端密码,但客户端是移动应用程序或 JavaScript 应用程序,因此很容易被窃取。
【问题讨论】: