我应该如何在django中正确实现HTTPS)auth(REMOTE AUTH)?

时间:2011-02-08 23:54:44

标签: android django http authentication

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

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

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

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

从安全的角度来看,这听起来是否合适?另外,有人能指出我如何使用内置于Django中的HTTP身份验证的示例吗?通过谷歌搜索,我可以发现很多剪辑一起破解这个功能。但是,它们都没有以it was added to Django in 1.1的方式实现HTTP身份验证。 The official documentation for REMOTE_AUTH can be found here,但由于我对Django不熟悉,因此我很难理解文档。

1 个答案:

答案 0 :(得分:2)

我不完全确定基本的auth如何在Django上运行,但我可以拍摄。

basic auth article on wikipedia涵盖了一个非常标准的登录用例。对于Android,我个人跳过第一部分(401)并立即通过我的凭据。

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

至于Android上的基本身份验证,一开始有点棘手,可能会让你拉扯你的头发。我发现this article on Basic HTTP auth for android有助于解释如何做到这一点。

至于它的安全部分,我不太确定。这很简单,我说这是件好事:)。