【问题标题】:How should I properly impliment HTTP(S) auth (REMOTE_AUTH) in django?我应该如何在 django 中正确实现 HTTPS) auth (REMOTE AUTH)?
【发布时间】:2011-02-08 23:54:44
【问题描述】:

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

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

    我打算用下面的方案来解决这个问题:

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

从安全的角度来看,这是否合理?另外,谁能指出一个如何使用 Django 内置的 HTTP 身份验证的示例?从谷歌搜索中,我可以找到很多代码片段一起破解该功能。但是,它们都没有以it was added to Django in 1.1 的方式实现 HTTP 身份验证。 The official documentation for REMOTE_AUTH can be found here,但由于我对 Django 非常陌生,因此我很难理解文档。

【问题讨论】:

    标签: android django http authentication


    【解决方案1】:

    我不完全确定基本身份验证在 Django 上的工作方式,但我可以试一试。

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

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

    至于 Android 上的基本身份验证,一开始有点棘手,可能会让您费尽心思。我找到了this article on Basic HTTP auth for android,这有助于解释如何做到这一点。

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

    【讨论】:

    • request.META['WWW-Authenticate'] 可能包含您要查找的身份验证凭据。
    猜你喜欢
    • 1970-01-01
    • 2011-07-10
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2019-03-05
    • 2020-12-08
    相关资源
    最近更新 更多