我正在尝试为我的API实现OAuth 2.0。我使用第三方库充当基本的OAuth提供程序,使用django-oauth2-provider,并使用Tastypie作为框架。这些细节不应该太重要。OAuth 2.0可以正常工作-创建用户时,将管理用户的secret_key及其ID的OAuth 2客户端创建。然后,客户可以提供从用户创建端点返回的用户ID以及用户名和密码,以获取允许他们使用API端点的访问令牌。
我遇到问题的地方是检索客户端ID(必须将其传递到访问令牌的请求中)。显然,当首次创建用户时,我可以返回带有HTTP响应的client_id。但是,此后,显然会出现用户没有在本地存储其客户ID的情况(这是传统的用户/应用设置,而不是像Google API这样的东西,您的客户ID总是可见的)。我想使用OAuth保护对客户资源的GET请求,但这意味着我无法为给定用户的客户ID查询API。如果我总是可以仅传递用户名和密码来从某个oauth端点检索我的客户端ID,似乎OAuth的全部观点都被击败了。我在想这个错误吗?
另外,通过阅读OAuth规范,我给人的印象是,应提供客户机ID和客户机机密才能获得访问令牌。但是我使用的实现默认是强制用户提供客户端ID,客户端机密,用户名和密码。我已经重写了实现,只要求提供客户机ID和密码,但是我想确保这是正确的调用,并且我没有丢失任何内容。
编辑flup的响应:
我正在将Django API作为资源服务器,并将iPhone应用程序的用户作为资源所有者。iPhone应用程序直接与服务器相关联-换句话说,这里没有第三方参与,也没有计划在将来与他们合作。所有软件都是我们的。我认为那种情况下需要密码流。确实,这似乎是django-oauth2-provider默认提供的。我想在某种程度上与他们所做的保持一致,而不必完全重新发明轮子。
oauth2的目标是让资源所有者为客户提供代客密钥,该代客密钥授权该代客密钥代表客户访问您服务器上的某些资源。
如果没有第三方参与,则无需授权客户端,也无需使用oauth2。
相反,您可以使用tastypie中存在的标准身份验证机制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句