如何使用Django REST API验证android用户POST请求?

时间:2013-08-20 08:57:33

标签: java android python django authentication

截至目前,我有一个Django REST API,对于Web应用程序来说,一切都很糟糕,其中我在后端实现了User Auth。 “login_required”条件适用于基于cookie的Web应用程序。

我现在有一个需要访问相同API的Android应用。我可以登录用户。我需要知道的是,当他们对我的观点发出GET / POST请求时,如何对每个用户进行身份验证?

我的研究显示了几个解决方案: 1)Cookie支持的会话 2)发送每个GET / POST请求的用户名和密码(可能不安全)

有什么想法吗?

3 个答案:

答案 0 :(得分:8)

听起来你正在使用Django REST Framework,在这种情况下TokenAuthentication可能是合适的。 来自文档:

  

此身份验证方案使用简单的基于令牌的HTTP   认证方案。令牌认证适用于   客户端 - 服务器设置,例如本机桌面和移动客户端

您无需预先生成令牌,因为客户可以使用您在urls.py中配置的内置视图obtain_auth_token来请求令牌。

客户端获取会话令牌后,可以使用Authorization: HTTP标头在后续API调用中提供该令牌。

查看文档以获取更多信息:http://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication

答案 1 :(得分:3)

  

HTTP基本身份验证(BA)实现是最简单的   用于对Web资源实施访问控制的技术,因为它   不需要cookie,会话标识符和登录页面。相反,   HTTP基本身份验证使用静态标准HTTP标头   意味着不必在预期中完成握手

要阅读更多内容并了解您需要在服务器端和客户端上执行的操作,请阅读以下内容:

http://en.wikipedia.org/wiki/Basic_access_authentication

我使用了不同的REST java框架,所有这些框架都提供了简单的API来添加基本身份验证标头添加和检索。

对于Django,这里有一些有用的代码片段:

http://djangosnippets.org/snippets/243/

答案 2 :(得分:0)

您可能想要使用Django Sessions中间件,它将使用django session_id设置cookie。在以下请求中,会话中间件将在您的请求对象上设置一个名为user的属性,然后您可以测试user.user.is_authenticated()(或login_required装饰器)是否对用户进行了身份验证。此外,您可以在设置中将会话超时设置为您喜欢的任何内容。

此中间件在默认的django设置中启用。