Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我应该如何在django中正确地实现HTTP(S)auth(REMOTE_auth)?_Android_Django_Http_Authentication - Fatal编程技术网

Android 我应该如何在django中正确地实现HTTP(S)auth(REMOTE_auth)?

Android 我应该如何在django中正确地实现HTTP(S)auth(REMOTE_auth)?,android,django,http,authentication,Android,Django,Http,Authentication,我正在计划一个新项目。我希望能够通过互联网控制我的android手机的多个继电器。我需要使用基于HTTP的服务器作为电话和中继之间的中间人。Django是我首选的平台,因为Python是我最强的技能。这不是一个“web应用程序”(管理用户及其对中继的访问的管理界面除外)。相反,服务器只是以HTTPS请求和JSON编码的形式提供API。不过,我应该注意到,我一生中从未做过任何web开发,所以我还不知道最佳实践。身份验证方法应满足以下标准: 通过HTTPS(自签名SSL)工作 提供多因素身份验证(

我正在计划一个新项目。我希望能够通过互联网控制我的android手机的多个继电器。我需要使用基于HTTP的服务器作为电话和中继之间的中间人。Django是我首选的平台,因为Python是我最强的技能。这不是一个“web应用程序”(管理用户及其对中继的访问的管理界面除外)。相反,服务器只是以HTTPS请求和JSON编码的形式提供API。不过,我应该注意到,我一生中从未做过任何web开发,所以我还不知道最佳实践。身份验证方法应满足以下标准:

  • 通过HTTPS(自签名SSL)工作
  • 提供多因素身份验证(以您拥有的和您知道的形式)
  • 相当安全(很难愚弄、猜测或绕过)
  • 对于移动客户端上的服务器运营商和最终用户来说,实现起来很简单
  • 在CPU周期和带宽方面都是轻量级的

    我计划使用以下方案来解决此问题:

  • 管理员登录web界面,创建用户,并设置其权限(包括用户选择的用户名和密码)
  • 用户启动客户端,选择添加服务器,并输入服务器URL和他/她的凭据
  • 客户端尝试通过HTTP auth对用户进行身份验证 (通过SSL)。如果身份验证成功,服务器将生成UUID形式的API密钥并将其发送给客户端。客户端将保存此密钥并在HTTPS上的所有API调用中使用它。HTTP auth仅用于恢复密钥之前的初始身份验证过程,因为此应用程序不需要会话方案。对吗?只有当手机配置为在短时间超时后自动锁定PIN码或图案时,客户端才会工作。服务器只允许每个用户生成一个密钥,除非管理员重置该密钥。因此,简单、移动、多因素身份验证成为可能

从安全角度来看,这是否合理?另外,有人能给我举个例子,说明如何使用Django中内置的HTTP身份验证吗?从谷歌搜索中,我可以找到很多窃贼,他们一起破解了这个功能。但是,它们都没有实现HTTP身份验证,但我很难理解文档,因为我对Django非常陌生。

我不完全确定basic auth在Django上的工作方式,但我可以试一试

本文介绍了一个非常标准的登录用例。对于Android,我个人跳过了第一部分(401),直接把我的证书交上来

对于auth请求,您只需从请求头(WWW-Authenticate)获取用户凭据,然后执行所有必要的工作。有了这些凭证,您就可以使用Django中提供的身份验证框架来验证用户是否生成了他们的UUID(我猜)

至于Android上的基本身份验证,一开始有点棘手,可能会让你毛骨悚然。我已经找到了一个解释如何做的方法


至于安全方面,我不太确定。它非常简单,我认为这是一件好事:)

request.META['WWW-Authenticate']可能包含您正在寻找的身份验证凭据。