我对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论坛的两种可能的解决方案。
答案 0 :(得分:21)
如果你正在读这篇文章,你可能会用Google搜索" aws cognito django"的xD。
我只是想分享我为了让这件事发挥作用所做的事情:
COGNITO_ATTR_MAPPING
设置进行映射。更改您的身份验证以支持第三方连接。当您从客户端获得一些Cognito令牌时,使用oAuth / JWT / Session将其转换为您自己的令牌。
重新思考您的登录/注册流程。你想要不同的注册吗? django-warrant包支持它......
在一天结束时,这是一个用于快速身份验证的 GREAT 解决方案。
答案 1 :(得分:2)
要添加到已接受的答案中,有一个简单但非常重要的额外步骤,我发现必须在Django 2.0中使用django-warrant:
根包中backend.py中的条件需要更改为:
if DJANGO_VERSION[1] > 10
收件人:
if DJANGO_VERSION[1] > 10 or DJANGO_VERSION[0] > 1:
在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包中提供了不同的文件而导致的。通过下载Linux版本的pycryptodome并将其Crypto软件包与Windows版本的Crypto软件包合并,最终解决了这个问题。
TLDR:如果要在django-warrant和AWS Lambda上使用并且正在Windows机器上进行开发,请确保下载pycryptodome的Linux版本,并将其Crypto软件包与Windows版本的软件包合并。
注意:为达到上述目的,我最终使用的pycryptodome和python-jose(不是python-jose-cryptodome)版本分别为3.7.2和3.0.1。