AWS Cognito作为网站的Django身份验证后端

Lar*_*son 30 python authentication django amazon-web-services amazon-cognito

我对Cognito的解读是,它可以代替本地Django管理数据库来验证网站用户.但是,我没有找到任何一个基本的"Hello,World"应用程序的例子,其中登录屏幕通过Cognito.如果有人可以发布一篇文章,逐步展示如何创建Hello World Django应用程序和Cognito用户池,以及如何通过调用AWS替换Django中的默认身份验证,我将非常感激. Cognito.

特别是我需要知道如何从Cognito管理站点收集设置对Cognito API的调用以验证用户所需的信息.

有两种情况需要考虑:App用户登录App,管理员登录django站点管理URL.我假设我想在两种情况下使用Cognito,否则我将留下一个潜在的漏洞,其中Admin URL使用较弱的登录技术.

AWS论坛和StackExchange上的当前答案要么说:

(1)使用Cognito对网站进行身份验证是浪费时间,它仅用于访问AWS资源

(2)这不是浪费时间.我即将放弃.我已经创建了一个示例Cognito用户池和用户组,并在网上搜索此用例的正确示例.(没有找到,或者我不会写.)

(3)https://github.com/capless/warrant,https://github.com/metametricsinc/django-warrant是从AWS论坛两种可能的解决方案.

Gal*_*man 26

如果您正在阅读本文,您可能会使用Google搜索"aws cognito django"xD.

我只是想分享我为了让这件事工作而做的事情:

  • Django-Warrant.伟大的aws cognito包装包.
  • 确保了解您当前的用户模型结构.如果您使用自定义用户模型,请不要忘记使用COGNITO_ATTR_MAPPING设置进行映射.
  • 更改您的身份验证以支持第三方连接.当您从客户端获得一些Cognito令牌时,使用oAuth/JWT/Session将其转换为您自己的令牌.

  • 重新考虑您的登录/注册过程.你想要不同的注册吗?django-warrant包支持它......

在一天结束的时候,这是一个伟大的快速身份验证解决方案.

  • 不幸的是,似乎django-warrant(和权证)已经变得无法维护.PyPI版本不适用于Django 2.0. (3认同)

小智 5

要添加到已接受的答案中,我发现在 Django 2.0 中使用 django-warrant 时需要采取一个简单但非常重要的额外步骤:

root包中backend.py中的conditional需要改成:

    if DJANGO_VERSION[1] > 10
Run Code Online (Sandbox Code Playgroud)

到:

    if DJANGO_VERSION[1] > 10 or DJANGO_VERSION[0] > 1:
Run Code Online (Sandbox Code Playgroud)

在 Zappa 和 AWS Lambda 中使用 django-warrant:

我正在处理的项目还使用 Zappa 来启用我的 Django 应用程序到 AWS Lambda 的无服务器部署。尽管上面的代码在本地测试时为我修复了 django-warrant,但在将应用程序部署到 Lambda 环境后,我遇到了另一个重大问题,该问题源于一些 django-warrant 的支持包 - 主要与 python-jose-pycryptodome 相关,其中 django-保证在认证过程中使用。该问题以与 Crypto._SHA256 文件相关的 FileNotFound 错误的形式出现。这个错误似乎是因为 pycryptodome 期望不同的文件在运行时分别在 Windows(我正在开发)和 Linux(Lambda 环境)上的 Crypto 包中可用。

TLDR:如果您想在 AWS Lambda 上使用 django-warrant 并且您正在 Windows 机器上进行开发,请确保下载 pycryptodome 的 Linux 版本并将其 Crypto 包与 Windows 版本中的相同。

注意:我最终用来实现上述目的的 pycryptodome 和 python-jose(不是 python-jose-cryptodome)的版本分别是 3.7.2 和 3.0.1。