问题标签 [amazon-cognito-triggers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1383 浏览

amazon-cognito - 使用 .Net Core 3 的 AWS Cognito 预身份验证 lambda 触发器 - 返回“InvalidLambdaResponse”异常

在 .Net Core 3 中编写 AWS Cognito Pre-Authentication lambda 触发器时需要一些帮助。我能够在 cognito 请求中将正确的属性作为“validationData”属性的一部分传递。当验证属性不满足条件时,我需要将“UnauthorizedResponse”发送回我的前端。但是,当我尝试从我的 .net 核心处理程序返回一个错误对象时,我最终会遇到“InvalidLambdaResponse”异常。任何帮助或示例代码都将非常有用。

这是我的代码片段 -

0 投票
2 回答
3778 浏览

javascript - 带有电话号码 OTP 的 AWS Cognito 身份验证,就像 firebase,没有 Amplify

我正在尝试为网站(非移动设备)启用登录和使用电话号码 + OTP 注册,就像 Firebase Auth 提供的一样。

我查阅了无穷无尽的教程,几乎所有教程都需要 AWS Amplify,然后需要了解 React/Angular/Vue(我不是前端开发人员)。我遵循了这样的教程(https://techinscribed.com/passwordless-phone-number-authentication-using-aws-amplify-cognito/)并创建了所有 Lambda 函数,如教程中所述的 Cognito UserPools。我的障碍是它需要 Amplify,而我只想使用 vanilla JavaScript。

所以我下载了 AWS SDK builder:

  • AWS.CognitoIdentity
  • AWS.CognitoIdentityServiceProvider
  • AWS.CognitoSync

我正在使用 Zappa 和 Flask(无服务器)向用户呈现 HTML + JS。我已经为后端配置了 API Gateway 的所有其他内容。我需要做的就是验证用户并为经过验证的用户生成会话令牌,允许访问他们的个人数据(如保存的信息、收藏夹等)。

我正在祈祷有人帮助我弄清楚如何验证我的用户并为我的用户生成会话/JWT 令牌。任何指导将不胜感激。

0 投票
2 回答
451 浏览

amazon-web-services - Cognito 用户的访问令牌在服务器端可用吗?

我正在处理用户在使用后没有明确退出 Web 应用程序的问题,这对于用例来说不够安全。它是一个带有 AWS Amplify 和 Cognito 的 React 应用程序。

我计划通过跟踪数据库中的会话来做到这一点(我可以使用在 PostAuthentication_Authentication 或 TokenGeneration_RefreshTokens 事件上用 Go 编写的 Cognito Lambda 触发器捕获会话的开始或刷新),并在一段时间不活动后使用 GlobalSignOut 使会话到期,但在为了在会话放弃时使用户刷新令牌无效,我需要访问令牌,它似乎只对客户端可用。

我可以在从 Web 客户端登录时显式获取此信息,然后使用 GraphQL 将其发布回数据库进行记录,但令我惊讶的是,它在发送到 Lambda 事件触发器的 Cognito 有效负载中不可用。如果在持续使用应用程序一小时后刷新,我也不确定如何在客户端上获取刷新的令牌,而不会增加应用程序中的每次更改的开销。

如果您在客户端上使用 Amplify 进行身份验证流程,是否可以从服务器端进程(如 Lambda 函数)请求 Cognito 用户的当前访问令牌?我在 cognitoidentityprovider 中看不到任何允许我检索访问令牌的内容,但显然需要使用 GlobalSignOut。

0 投票
1 回答
881 浏览

python - aws appsync graphql api与python

我想使用 Python 代码访问 AWS AppSync API 并与请求库混淆。

身份验证模式是 Cognito 用户池。我的问题是:

  1. 如何从 Cognito 用户池获取访问令牌?

  2. 如何进行查询、突变和处理订阅?

我尝试使用身份验证模式 API 密钥来做到这一点。但我收到以下错误。

{ "errors" : [ { "message" : "无法解析 GraphQL 查询。", "errorType" : "MalformedHttpRequestException" } ] }

我看过这个视频https://www.youtube.com/watch?v=2U4RsbFO4bA&t=1172s 在这个视频中,为了使用 cognito 用户池进行身份验证,他说要调用 cognito 用户池并获取令牌并通过它到标头中的 aws appsync。

我是 aws 和 python 请求模块的新手,正在尝试为此视频编写 python 代码。

0 投票
2 回答
1335 浏览

amazon-cognito - 如何禁用通过身份提供商创建的 AWS Cognito 用户池帐户?

那里有任何 Cognito 用户池专家吗?我已经使用 Cognito 有一段时间了,但是这个让我有点难过。

  • 我们允许用户使用 Facebook 等社交账户注册和登录,这些账户在用户池中设置为身份提供者。

  • 用户需要先完成自定义注册表单才能使用主应用程序 - 我们不使用托管 UI 进行登录或注册

  • 自定义注册过程的一个步骤允许用户指示随后要使用的社交提供者

  • 这使我们能够从社交服务提供商那里撤回用户的电子邮件、名字和姓氏,这很棒 - 我们目前使用 cognito 客户端和回调来执行此操作

  • 但是这样做,这会在注册过程完成之前在 Userpool 中提供一个用户 - 事实上这是有道理的 - 为了让 Cognito 向我们提供它需要调用到社交提供者 /userinfo 端点以填充用户数据

  • 所以,我们现在遇到的问题是,当用户完成注册过程的一半时,我有一个确认的用户帐户 - 例如。在用户完成注册过程之前

  • 这是一个问题,因为用户可以使用他们的社交登录名登录应用程序,而无需完成注册过程

所以在我看来,我有两个选择:

  • PostConfirmation Lambda 触发器,它使用 cognito-idp SDK 在用户确认后立即禁用用户
  • 不要使用 Cognito 来获取用户信息,例如名字、姓氏、电子邮件、图片等 - 但是这需要我们为每个当前和未来的社交提供商编写一个解决方案,这不是我热衷的事情

我错过了一些明显的东西吗?

提前致谢!

0 投票
2 回答
125 浏览

aws-lambda - 为什么在执行调用 cognito lambda 触发 PostConfirmation 和 PreTokenGeneration 的开玩笑测试时会出现随机错误?

我有一个PostConfirmationlambda 触发器,它 通过GraphQL (appsync https 调用)将数据添加到DynamoDB,然后我在lambda 中查询该信息。当我通过我的应用程序 UI 手动测试时,一切正常。但是,当通过 Jest 测试执行时,由于在 DynamoDB 中找不到假定的记录信息,50% 以上的时间会出现错误。当我通过 UI 应用程序手动测试时,不会出现此问题。仅在通过 Jest 测试执行时。PreTokenGeneration

我检查了PostConfirmation添加 DynamoDB 记录的 Cloudwatch 时间戳,PreTokenGeneration并检查了 DynamoDB 中的 createDate。时间戳看起来不错。例如:

  • PostConfirmation表示已添加记录的日志条目的时间戳为2020-08-24T17:51:06.463Z
  • 添加的记录 (createdAt)的DynamoDB createdAt表示该记录是在2020-08-24T17:51:06.377Z.
  • lambda " PostConfirmationEND RequestId: xxxxx" 的时间戳为2020-08-24T17:51:06.465-05:00
  • PreTokenGeneration lambda 从查询结果开始,2020-08-24T17:51:12.866Z2020-08-24T17:51:13.680Z查询结果中表示它没有找到任何记录。

有人可以帮助我或提示我为什么会发生这种情况和/或我该如何解决这个问题?先感谢您。

考虑到@noel-llevares 的答案,我修改了 VTL 模板以包含 ConsistentRead=true 但问题仍然存在。

这是为保存操作记录的 RequestMapping

为保存操作记录的 ResponseMapping

这是为列表操作记录的请求映射。你可以看到consistentRead=true

这是记录的 responseMapping。您可以看到结果是一个空数组 ( items:[]),即使之前已经添加了记录并且我们已经consistentRead=true为查询指定了该记录。

我还能错过什么?

更新02

我找到了可能的原因。这是因为我不熟悉 DynamoDB 的工作方式。查询或扫描操作按键获取结果。在这种情况下,不涉及密钥,因此它会考虑到所有记录的限制。在我的情况下,它是 100,然后它应用过滤器。因此,如果添加的记录不在前 100 个结果中,除非我通过分页(不适合特定需要),否则它无法找到它。

TL;DR:我将查询更改为使用@key 指令,并将 userID 作为关键字段,问题已经解决,因为 que 字段是 GSI,并且我希望使用此类分区检索的记录数远低于 100 限制. 完成撤消之前所做的调整后,我会将此添加为答案的一部分。

0 投票
1 回答
315 浏览

python - 在确认后触发器中禁用用户

我有一个不同类型的用户群(user_type 属性将定义类型)。我想在确认后禁用某些类型的用户。即流程:用户注册--> 用户收到带有代码的确认电子邮件--> 用户输入代码--> 后确认触发器被调用。

这是我的确认后触发器 lambda:

这将返回以下错误:

有没有办法在使用触发器时禁用某些类型的用户?我也尝试过使用预注册,但这里的问题是所有其他类型的用户都需要自动确认,这不是我想要的。我需要普通用户接收确认电子邮件,而某种类型的用户需要接收确认然后被禁用或不被确认。

我真的很感激这方面的任何帮助

谢谢,

0 投票
0 回答
66 浏览

java - aws cognito 来宾用户使用 java 登录

有什么方法可以让访客用户(即不是 cognito 中的注册用户)登录。我们正在使用java。此外,我们如何允许用户使用其他身份验证提供商(例如 Facebook、Google 等)登录?

谢谢

0 投票
1 回答
420 浏览

python-3.x - 在 Cognito 中发布确认后将用户添加到组时出错

我在Cognito.

我想做的是当一个新用户尝试使用 UI 注册时,他会得到一个验证码。用户输入代码后,Post confirmation必须触发 lambda,并且必须将此新创建的用户直接添加到名为users.

我找到了 admin_add_user_to_group客户端并编写了以下代码并将其部署为 lambda:

部署代码后,我将其连接到Post confirmation触发器。现在,当用户尝试注册时,会发送一个代码。但是,当我粘贴代码以确认用户时,会发生两件事:

  1. 用户得到确认,但是,
  2. 用户未添加到users组中。

它显示以下错误:

在此处输入图像描述

我犯了什么错误?

0 投票
1 回答
136 浏览

amazon-web-services - AWS Cognito 在 authEvents 中发送无效的 DeviceName

我使用CognitoIdentityServiceProvider.adminListUserAuthEvents获取用户身份验证事件,但收到无效结果。我从 Opera 登录,但 Cognito 显示我使用的是 Chrome 8(这是一个错误)。

如果我得到原始文件navigator.userAgent(例如:),我可以解决这个问题Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 OPR/72.0.3815.400,但我只收到这样的数据:

我不想做拐杖来澄清这些信息,比如创建preauthCognito 触发器,它将把这些信息记录在另一个表中并自己处理这个流程

UPD :我在这里找到的检测浏览器的拐杖

UPD 2官方 AWS Github 存储库上的未解决问题