截至目前,我有一个Django REST API,对于Web应用程序来说,一切都很糟糕,其中我在后端实现了User Auth。 “login_required”条件适用于基于cookie的Web应用程序。
我现在有一个需要访问相同API的Android应用。我可以登录用户。我需要知道的是,当他们对我的观点发出GET / POST请求时,如何对每个用户进行身份验证?
我的研究显示了几个解决方案: 1)Cookie支持的会话 2)发送每个GET / POST请求的用户名和密码(可能不安全)
有什么想法吗?
答案 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,这里有一些有用的代码片段:
答案 2 :(得分:0)
您可能想要使用Django Sessions中间件,它将使用django session_id设置cookie。在以下请求中,会话中间件将在您的请求对象上设置一个名为user的属性,然后您可以测试user.user.is_authenticated()(或login_required装饰器)是否对用户进行了身份验证。此外,您可以在设置中将会话超时设置为您喜欢的任何内容。
此中间件在默认的django设置中启用。