AWS Cognito作为web si的Django认证后端

2024-04-29 19:52:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

特别是,我需要知道如何从Cognito管理站点收集信息,这是建立对Cognito API的调用以对用户进行身份验证所必需的。

有两种情况需要考虑:应用程序用户登录到应用程序,以及管理员登录到网站的django管理员URL。我假设我想在这两种情况下都使用Cognito,否则我将留下一个潜在的漏洞,其中Admin URL使用较弱的登录技术。

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

(1)使用Cognito认证网站是浪费时间,它只用于访问AWS资源

(2)这不是浪费时间。我要放弃了。我甚至创建了一个Cognito用户池和用户组示例,并在web上搜索这个用例的适当示例。(没有找到,否则我就不会写信了。)

(3)https://github.com/capless/warranthttps://github.com/metametricsinc/django-warrant是两个来自aws论坛的可能解决方案。


Tags: django用户身份验证aws应用程序urlhelloworld
2条回答

如果你正在阅读这篇文章,你可能会在谷歌上搜索“aws cognito django”xD。

我只想和大家分享我做了些什么来让这件事发挥作用:

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

  • 重新思考您的登录/注册过程。你想换个登记吗?django授权包支持它。。。

归根结底,这是一个用于快速身份验证的伟大的解决方案。

除了公认的答案外,还有一个简单但非常重要的额外步骤,我发现在django 2.0中使用django权证是必要的:

根包中backend.py中的条件需要从以下位置更改:

    if DJANGO_VERSION[1] > 10

致:

    if DJANGO_VERSION[1] > 10 or DJANGO_VERSION[0] > 1:

对Zappa和AWS Lambda使用django搜查令:

我正在处理的项目还使用Zappa来实现我的Django应用程序到AWS Lambda的无服务器部署。尽管上面的代码在本地测试时为我修复了django许可证,但在将应用程序部署到Lambda环境之后,我遇到了另一个重大问题,这是由于django许可证的一些支持包造成的,主要与python jose pycryptodome有关,django许可证在身份验证过程中使用了python jose pycryptodome。该问题以与加密相关的FileNotFound错误的形式出现。这个错误似乎是由于pycryptodome希望在Windows(我正在开发的)和Linux(Lambda环境)上的Crypto包中分别有不同的文件可用而导致的。我最终通过下载Linux版本的pycryptodome并将它的Crypto包与Windows版本的Crypto包合并来解决这个问题。

TLDR:如果你想将django授权与AWS Lambda一起使用,并且你是在Windows机器上开发的,那么一定要下载Linux版本的pycryptodome,并将其密码包与Windows版本的密码包合并。

注意:pycryptodome和python jose(不是python jose cryptodome)的版本分别是3.7.2和3.0.1。

相关问题 更多 >