2013-12-12 43 views
2

我想为我的API实现OAuth 2.0。我使用第三方库作为基本OAuth提供者,django-oauth2-provider, 和Tastypie作为框架。这些细节不应该太重要。 OAuth 2.0的作品 - 创建用户时,会创建管理用户的secret_key及其id的OAuth 2客户端 。然后,客户可以提供他们从用户创建端点 获得的用户ID以及他们的用户名和密码,以获取允许他们使用API​​端点的访问令牌。 id(必须传递给访问令牌的请求)。显然,当第一次创建用户时 我可以用HTTP响应返回client_id。然而,在那之后,显然会出现这样的情况,用户没有在本地存储他们的客户端ID( )(这是一个传统的用户/应用程序设置,而不是像客户端ID始终可见的Google API那样)。我想用OAuth保护 GET请求到客户资源,但这意味着我无法查询给定用户的客户端ID的API。而且,似乎OAuth的整个点 被击败,如果我总是可以通过用户名和密码从某个oauth端点检索我的客户端ID。我在想这个错吗?OAuth 2.0客户端ID在Django/tastypie实施

另外,通过阅读OAuth规范,我的印象是客户端ID和客户端秘密都是应该提供的用于获取访问令牌的应用。然而,我使用的实现默认强制用户提供客户端ID,客户端密码,用户名和密码。我已经覆盖了实现,只需要客户端ID和密码,但我想确保这是正确的调用,我不会错过任何东西。

编辑为flup的回应:

我处理一个Django API作为资源服务器,以及一个iPhone应用程序的用户作为资源所有者。 iPhone应用程序与服务器直接相关 - 换句话说,这里没有第三方参与,也没有计划将来涉及他们;所有软件都是我们的。我认为在这种情况下密码流将是我所需要的。事实上,这似乎是django-oauth2-provider默认提供的。我想保持与他们正在做的事情不一定要完全重新发明轮子一致。

+0

您写道:“管理用户的secret_key并创建其id的OAuth 2客户端”。随着OAuth 2,不再有客户机密。你想使用哪个版本的OAuth?在最后一段中,您还写道“通过阅读OAuth规范,我的印象是客户端ID和客户端秘密...”,但在OAuth 2中,没有客户端秘密(我知道,我重复自己)。我有点困惑,你想要什么。 –

+0

@FabianParzefall oauth2授权授权流程确实使用客户端密钥,隐式流程没有 – flup

回答

0

oauth2的目标是让资源所有者为客户提供一个代客钥匙,授权客户代表他访问服务器上的某些资源。

如果没有第三方参与,则没有客户端可以授权,也不需要使用oauth2。可以使用standard authentication mechanisms present in tastypie

+0

我已经写下了一些基础知识,能否更新您的问题,说明客户端是什么以及您希望实现哪个流程? – flup

+0

当然,只是更新了它 – user1427661

+0

你写道,每个用户都有一个客户端是一种误解。但是,如果您查看django-oauth2-provider代码,则每个客户端(与访问键关联)都属于单个用户:https:// github。com/caffeinehit/django-oauth2-provider/blob/master/provider/oauth2/models.py(检查客户端类)。 – user1427661

相关问题