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

     2023-03-08     262

关键词:

【中文标题】AWS Cognito 作为网站的 Django 身份验证后端【英文标题】:AWS Cognito as Django authentication back-end for web site 【发布时间】:2017-10-29 07:17:50 【问题描述】:

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

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

有两种情况需要考虑:App 用户登录 App,以及 Admin 登录到站点的 django Admin URL。我假设我想在这两种情况下都使用 Cognito,否则我会留下一个潜在的漏洞,即 Admin URL 使用的是较弱的登录技术。

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

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

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

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

【问题讨论】:

我在同一条船上。计划将 Cognito 用于移动原生应用程序和 Django 服务器后端背后的联合社交登录。真的很惊讶,那里至少没有一个身份验证后端。 我想用它来让我的网站看起来很漂亮,使用 2 因素身份验证,但除非他们开辟道路,否则它太复杂了。我发现 AWS for Python 上的“操作方法”指南往往已经过时,而且他们没有投入任何精力来更新它们。我在AWS Forum 上提出了同样的问题,但亚马逊技术人员尚未回复。 github.com/metametricsinc/django-warrant 【参考方案1】:

如果您正在阅读本文,您可能在 Google 上搜索了“aws cognito django”xD。

我只是想分享一下我为使这件事发挥作用所做的工作:

Django-Warrant。很棒的 aws cognito 包装包。 确保了解您当前的用户模型结构。如果您使用自定义用户模型,请不要忘记使用COGNITO_ATTR_MAPPING 设置对其进行映射。

更改您的身份验证以支持第 3 方连接。当您从客户端获取一些 Cognito 令牌时,使用 oAuth/JWT/Session 将其转换为您自己的令牌。

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

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

【讨论】:

感谢您分享我们的项目,很高兴它对您有所帮助。 我对 django 很陌生。在尝试这个时,我得到了。未找到模板保证/login.html。 不幸的是,django-warrant(和保证)似乎已无人维护。 PyPI 版本不适用于 Django 2.0。 截至 2021 年 7 月,软件包 django-warrant 尚未积极开发,有人可以建议一些替代软件包吗?【参考方案2】:

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

根包backend.py中的条件需要改成:

    if DJANGO_VERSION[1] > 10

到:

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

将 django-warrant 与 Zappa 和 AWS Lambda 一起使用:

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

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

注意:我最终使用的 pycryptodome 和 python-jose(不是 python-jose-cryptodome)的版本分别是 3.7.2 和 3.0.1。

【讨论】:

使用 AWS Cognito 和 Django 创建用户

】使用AWSCognito和Django创建用户【英文标题】:CreateusersusingAWSCognitoandDjango【发布时间】:2020-09-1115:11:42【问题描述】:我正在使用Django(后端)和ReactJS(前端)制作应用程序。该应用程序将托管在AWS上。我想使用AWSCognito来允许... 查看详情

网站的 AWS Cognito 应用程序客户端设置

】网站的AWSCognito应用程序客户端设置【英文标题】:AWSCognitoappclientsetupforawebsite【发布时间】:2021-08-2414:41:15【问题描述】:我正在努力将Cognito与我的团队正在为用户身份验证构建的网站集成。对于我应该设置的应用客户端的... 查看详情

如何使用 Amazon Cognito 作为我的网站(非移动应用程序)的用户身份验证 [关闭]

】如何使用AmazonCognito作为我的网站(非移动应用程序)的用户身份验证[关闭]【英文标题】:HowdoIuseAmazonCognitoasuserauthenticationformywebsite(NOTmobileapp)[closed]【发布时间】:2014-09-0104:03:34【问题描述】:如何在Web应用程序(不是IOS或An... 查看详情

AWS Cognito 与 django 休息框架反应 js?

】AWSCognito与django休息框架反应js?【英文标题】:AWSCognitoinreactjswithdjangorestframework?【发布时间】:2021-04-2305:18:22【问题描述】:我想在我的web应用程序中将第三方身份验证与AWSCognito集成。我有一个带有django后端的ReactJS应用程序... 查看详情

使用 AWS Cognito 和 AD FS 作为 Web 应用程序的身份验证

】使用AWSCognito和ADFS作为Web应用程序的身份验证【英文标题】:UsingAWSCognitoandADFSasauthenticationforawebapp【发布时间】:2018-10-2306:24:56【问题描述】:我们目前正在AWS上使用完整的无服务器堆栈构建Web应用程序。到目前为止,我们使... 查看详情

AWS Cognito 模拟

】AWSCognito模拟【英文标题】:AWSCognitoMock【发布时间】:2016-05-0216:08:04【问题描述】:我想为我的基于nodejs的API编写BDD测试,该API使用AWScognito作为用户身份验证服务,但我不想在每次构建运行时都使用真正的cognito服务。是否有... 查看详情

我们如何使用 GitHub 帐户作为 AWS Cognito 身份提供商?

】我们如何使用GitHub帐户作为AWSCognito身份提供商?【英文标题】:HowcouldweuseGitHubaccountasanAWSCognitoIdentityprovider?【发布时间】:2017-11-0721:34:35【问题描述】:通过阅读CognitoIdentityProviderdocument,我了解到它似乎提供了与Facebook/Google/... 查看详情

Django - 在处理终端节点请求之前验证 AWS Cognito 令牌是不是有效

】Django-在处理终端节点请求之前验证AWSCognito令牌是不是有效【英文标题】:Django-VerifyAWSCognitotokenisvalidbeforeprocessingendpointrequestDjango-在处理终端节点请求之前验证AWSCognito令牌是否有效【发布时间】:2021-10-3014:28:36【问题描述】... 查看详情

由于错误 AccessDeniedException(Lambda 别名作为 Cognito 触发器),AWS Cognito 用户池引发 PreSignUp 调用失败

】由于错误AccessDeniedException(Lambda别名作为Cognito触发器),AWSCognito用户池引发PreSignUp调用失败【英文标题】:AWSCogntiouserpoolthrowingPreSignUpinvocationfailedduetoerrorAccessDeniedException(LambdaaliasasCognitotrigger)【发布时间】:2021-11-0501:14:37 查看详情

Cognito 用户池作为具有客户端凭据的身份提供者仅在保存到 aws 控制台后才有效

】Cognito用户池作为具有客户端凭据的身份提供者仅在保存到aws控制台后才有效【英文标题】:CognitoUserpoolasidentyproviderwithclientcredentialsworksonlyaftersavinginawsconsole【发布时间】:2021-11-2211:05:27【问题描述】:我正在使用无服务器框... 查看详情

通过 Cognito 生成的授权令牌识别 AWS Lambda 中的用户

】通过Cognito生成的授权令牌识别AWSLambda中的用户【英文标题】:IdentifyuserwithinAWSLambdafromauthorizationtokengeneratedviaCognito【发布时间】:2020-01-1011:01:29【问题描述】:我们使用APIGateway来公开位于AWSLambdas前面的API。作为授权方,Cognito... 查看详情

AWS Cognito:Cognito 用户池的元数据 URL 在哪里?

】AWSCognito:Cognito用户池的元数据URL在哪里?【英文标题】:AWSCognito:whereisthemetadataURLofCognitoUserPool?【发布时间】:2022-01-1815:02:31【问题描述】:我正在尝试使用AWSCognito作为我在AWSAPIGateway中的RESTAPI的授权方。它要求我填写IssuerUR... 查看详情

AWS-amplify 在请求中包含 cognito Authorization 标头

】AWS-amplify在请求中包含cognitoAuthorization标头【英文标题】:AWS-amplifyIncludingthecognitoAuthorizationheaderintherequest【发布时间】:2018-11-1116:45:14【问题描述】:我创建了一个包含Cognito和云逻辑的AWS移动中心项目。在我的API网关中,我为... 查看详情

在 DynamoDB 中保存 AWS Cognito 用户

】在DynamoDB中保存AWSCognito用户【英文标题】:SaveAWSCognitoUsersinDynamoDB【发布时间】:2018-05-3118:54:46【问题描述】:我最近开始尝试使用AWSAppSync,但我对AWSCognito有一些疑问。我希望用户能够通过Facebook进行身份验证,但我需要他们... 查看详情

iOS AWS AppSync 401 IAM + Cognito

】iOSAWSAppSync401IAM+Cognito【英文标题】:【发布时间】:2020-03-2013:50:36【问题描述】:您好,我使用AWSAppSync作为后端graphQL数据库。我正在使用Cognito来管理登录、用户和身份验证。我正在使用IAM来管理身份规则和来宾用户。这是我... 查看详情

没有密码的 AWS Cognito 用户池

】没有密码的AWSCognito用户池【英文标题】:AWSCognitoUserPoolwithoutapassword【发布时间】:2018-01-2120:04:17【问题描述】:我想使用电话号码作为我的应用程序的用户名,并且我希望能够通过每次他们想要登录时验证电话号码来简化注... 查看详情

带有 ADFS 的 AWS Cognito:颁发者与 providerName 不匹配

】带有ADFS的AWSCognito:颁发者与providerName不匹配【英文标题】:AWSCognitowithADFS:Issuerdoesn\'tmatchproviderName【发布时间】:2020-09-2110:35:54【问题描述】:我正在尝试在无服务器lambda中设置AWS.config.credentials(在REST端点中运行)。登录来... 查看详情

如何在 AWS Lambda 中获取 Cognito 身份 ID

】如何在AWSLambda中获取Cognito身份ID【英文标题】:HowtogettheCognitoIdentityidinAWSLambda【发布时间】:2015-07-0720:00:53【问题描述】:如何获取调用AWSLambda函数的用户(通过AWSCognito登录)的身份ID?我是否必须使用Lambda函数上的SDK来获取... 查看详情