【问题标题】:How to encrypt or Obfuscate REST API URL in Django如何在 Django 中加密或混淆 REST API URL
【发布时间】:2021-10-18 21:53:36
【问题描述】:

您好 Django REST API 专家,

我们正在构建大学课程门户,其中应用提供各种用户类型,例如使用 DJANGO/REACT 的教授、学生和管理员。我们正在使用 REST API 来连接后端和前端。

所以,到目前为止,我们能够执行一些基本操作,而且效果非常好。但是现在我需要这个小组的帮助来做以下事情:

当学生注册课程时,它会生成一份确认文件,说明课程描述以及需要学生签署的前提条件,以确保学生承认他们满足这些要求。

为了做到这一点,我们有以下几点:

  • 每门课程的模型,其中包含每门课程的内容、描述和先决条件。
  • StudentCourseAck 模型,其中包含对课程的 FK、签名布尔字段、用于存储签名文档的二进制字段。

用户流量:

  • 学生登录门户,
  • 选择生成 StudentCourseAck 条目的课程。
  • 让学生审阅文件并签署文件(在客户端使用签名板)。
  • 签名以 PDF 格式存储(作为二进制字段)。

到目前为止一切都很好......

现在我们想要增强功能集,允许管理员通过电子邮件向学生发送 studentcouseack 文档的链接,以防在课程开始前未签名。此外,此链接应仅在 48 小时内有效,否则将过期。

所以我们需要一些帮助来增强这些功能集,如下所示:

  • 当前 API 暴露给前端,例如:mysite.com/courseack/studentid/documentid
  • 但是,我们希望对此进行加密,因此链接如下所示:mysite.com/uniqueid
  • uniquid 映射到 /studentid/documented 的位置

所以我有以下设计问题:

  • 问题 1:我们是否应该增强 StudentCourseAck 来存储每个文档的 UUID?
  • 问题 2:如果我为每个文档存储 UUID,如何使其在生成后过期?
  • 问题 3:当学生完成签名后,我需要将文档更新到数据库中,以确保将正确的文档保存到正确的学生档案中,那么如何确保此安全要求。

非常感谢一些专家意见或指导,以便我们继续实施此功能。任何其他更简单、更易于维护的替代方案。

再次感谢您的时间和考虑。

谢谢。

【问题讨论】:

    标签: django django-models django-rest-framework django-react


    【解决方案1】:

    任何其他更简单、更易于维护的替代方案。

    牢记上述短语,我提出了这个解决方案。 首先,我不会将此视为 DRF 问题,而是将其视为一般问题并继续回答您的问题。

    简单的解决方案在于 4 个步骤

    1. 在 StudentCourseACK 中创建一个 UUID 字段,以便您可以将此 uuid 与您的 url mysite.com/uniqueid 映射,将 StudentCourseACK 记录中的文档 ID 作为外键捕获,并在模型中创建一个 created_at(这是必需的用于到期计时器)
    2. 在您的views.py 中创建一个视图,该视图将此 StudentCourseACK UUID 作为 url 参数,您必须从该 StudentCourseACK 映射表中获取 courseack、studentid 和 documentid 并将其重定向到 mysite.com/courseack/studentid/documentid。当您将此视图与您的 url 模式链接时,请确保列表位于最底部。
    3. 要设置到期计时器,您可以在第 2 步中重定向之前检查 StudentCourseAck 记录中的 created_at 日期是否有 48 小时限制
    4. 最后,当学生被重定向到 mysite.com/courseack/studentid/documentid 端点时,您必须遵循通过.filter(studentid="some value", documentid="somevalue") 获取 StudentCourseAck 数据的简单过程,并相应地更改此数据。

    我意识到的另一件事是,您可以完全放弃冗长的 mysite.com/courseack/studentid/documentid 网址并在新视图中对应其逻辑,但我假设您希望保持这种方式。

    【讨论】:

    • 感谢 Ruchit 的回复。我认为这种解决方案会很好,但是我认为这种方法应该有通用的解决方案,因此将来如果我们需要执行与另一个功能类似的功能,我们可以对其进行扩展。当您说“mysite.com/courseack/studentid/documentid url 并在新视图中对应它的逻辑”时,这是什么意思?我觉得我采取的方法真的很长,所以如果有其他选择,我想简化一下。谢谢。
    猜你喜欢
    • 2012-06-14
    • 1970-01-01
    • 2017-04-23
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    相关资源
    最近更新 更多