【发布时间】:2013-12-31 10:07:58
【问题描述】:
我正在尝试为我的 API 实施 OAuth 2.0。我正在使用第三方库作为基本的 OAuth 提供程序 django-oauth2-provider, 和 Tastypie 作为框架。这些细节不应该太重要。 OAuth 2.0 有效——创建用户时,OAuth 2 客户端 管理用户的 secret_key 并创建他们的 id。然后,客户可以提供他们从用户创建中获得的用户 ID 端点连同他们的用户名和密码来获得一个访问令牌,允许他们使用 API 端点。·
我遇到问题的地方是检索客户端 ID(必须将其传递到访问令牌的请求中)。显然当一个用户第一次被创建时 我可以用 HTTP 响应返回 client_id。然而,在那之后,显然会有用户没有他们的客户ID的情况· 存储在本地(这是传统的用户/应用程序设置,而不是像 Google API 那样您的客户端 ID 始终可见)。我要保护 使用 OAuth 获取对客户资源的请求,但这意味着我无法查询 API 以获取给定用户的客户端 ID。这似乎是重点 如果我总是可以只传递用户名和密码以从某个 oauth 端点检索我的客户端 ID,那么 OAuth 就会失败。我是不是想错了?
此外,通过阅读 OAuth 规范,我的印象是,客户端 ID 和客户端密码都是为了获得访问令牌而应该提供的。然而,我使用的实现默认强制用户提供客户端 ID、客户端密码、用户名和密码。我已经重写了实现,只需要客户端 ID 和密码,但我想确保这是正确的调用并且我没有遗漏任何东西。
编辑flup的响应:
我正在处理一个 Django API 作为资源服务器,一个 iPhone 应用程序的用户作为资源所有者。 iPhone 应用程序直接与服务器相关联——换句话说,这里没有第三方参与,也没有计划在未来让他们参与;所有软件都是我们的。我认为密码流将是我在这种情况下所需要的。事实上,这似乎是 django-oauth2-provider 默认提供的。我想与他们正在做的事情保持一致,而不必完全重新发明轮子。
【问题讨论】:
-
您写道,“创建了一个管理用户的 secret_key 和他们的 id 的 OAuth 2 客户端”。使用 OAuth 2,不再有客户端机密。您要使用哪个版本的 OAuth?在最后一段中,您还写了“通过阅读 OAuth 规范,我的印象是客户端 ID 和客户端密码......”,但在 OAuth 2 中,没有客户端密码(我知道,我自己重复一遍)。我有点困惑,你想要什么。
-
@FabianParzefall oauth2 授权授权流程确实使用了客户端密码,隐式流程不使用
标签: django oauth oauth-2.0 tastypie