4

As of now, I have a Django REST API and everything is hunky dory for the web app, wherein I have implemented User Auth in the backend. The "login_required" condition serves well for the web app, which is cookie based.

I have an Android app now that needs to access the same API. I am able to sign in the user. What I need to know is how to authenticate every user when they make GET/POST request to my views?

My research shows a couple of solutions: 1) Cookie-backed sessions 2) Send username and password with every GET/POST request(might not be secure)

Any ideas?

4

3 回答 3

8

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

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

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

一旦客户端获得了会话的令牌,他们就可以使用Authorization:HTTP 标头在后续 API 调用中提供它。

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

于 2013-08-20T09:13:17.880 回答
3

HTTP 基本身份验证 (BA) 实现是对 Web 资源实施访问控制的最简单技术,因为它不需要 cookie、会话标识符和登录页面。相反,HTTP Basic 身份验证使用静态的标准 HTTP 标头,这意味着无需事先进行握手

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

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

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

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

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

于 2013-08-20T09:13:17.913 回答
0

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

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

于 2013-08-20T11:57:48.650 回答