问题标签 [aws-cognito]

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 投票
3 回答
7996 浏览

javascript - 创建一个将 lambda 配置为触发器的 Cognito UserPool

我正在尝试使用 JavaScript SDK 从脚本以编程方式创建 Cognito 用户池。

我已经成功创建了用户池并通过在我的配置中指定相关 lambda 的 arn 来定义预注册和确认后触发器。(根据文档

我的脚本如下所示:

当我运行此脚本时,它成功创建了用户池,并且当我在控制台中检查它时,触发器设置正确。

当我尝试在我的用户池中注册用户时,出现错误:

如果我进入控制台并手动设置触发器,它就可以正常工作。

已报告此错误 - 但我没有看到任何确认,也没有解决方案:

https://github.com/aws/aws-cli/issues/2256

拼命无法修复或找到解决方法。

0 投票
1 回答
394 浏览

swift - AWS APIGateway & Lambda - 如何在 iOS 应用程序终止之前调用函数?

我已经使用 AWS 工作了一段时间,并且开始掌握 APIGateway 和 Lambda 的窍门。我刚刚制作了一个 Lambda 函数,它接收用户输入的用户名,然后使用 AdminDeleteUser 函数从用户池中删除该用户,它工作正常。我什至用 APIGateway 设置了它以在 XCode 中使用,它也可以正常工作。

问题
我的问题是,我试图让 Lambda 函数在用户终止 iOS 应用程序时正确运行。我正在使用 NotificationCenter 观察者来观察应用程序何时终止,除了我相信 Lambda 函数的调用在应用程序完全终止后被取消这一事实之外,一切正常,这意味着它无法完成完整的请求。我的 lambda 函数本质上检查正在接收的用户名是否是未确认的用户,如果未确认,则将其从用户池中删除。我在用户必须确认通过 SMS 发送的确认码的屏幕上执行此操作

问题
所以我想我的问题是,

  1. 应用程序终止时是否可以调用 Lambda 函数?
  2. 如果没有,是否可以在应用退出之前将当前用户从用户池中删除,如果他们没有得到确认?

提前谢谢你。

0 投票
0 回答
467 浏览

swift - AWS Lambda 和 Cognito - 更新用户电话号码属性而不发送 SMS

我正在使用 Amazon Web Services 开发 iOS 应用程序,并且正在使用 Cognito 用户池设置用户数据库。在注册过程中,如果用户错误地输入了错误的电话号码,导致没有收到验证码,我试图让他们输入一个新的电话号码,并更新他们的电话号码用户属性。现在我正在使用一个 Lambda 函数,该函数使用 AdminUpdateUserAttribute 函数,然后连接到 APIGateway,允许我从 XCode 运行它。该函数本身有效,并且成功更新了电话号码属性。

问题
我遇到的问题是,在使用 Lambda 函数更新电话号码属性后,验证码会自动通过 SMS 发送到新更新的电话号码。验证码很奇怪,因为当我使用该代码确认用户时,它不起作用。这意味着该代码对于确认目的无效。但是,如果我使用重新发送确认码功能,它将向新更新的电话号码发送一个有效的确认码。

问题
所以我想我的问题是:

  1. 更新用户电话号码属性后,如何防止自动发送短信?
  2. 或者,有没有办法可以使用自动发送的验证码作为确认码?

提前谢谢你。

0 投票
2 回答
1117 浏览

amazon-web-services - Cognito:联合身份 ID 和用户属性

故事:

我有一个包含用户的 Cognito 用户池。

此用户池是联合身份池中的身份验证提供程序。

我有一个 S3 存储桶,用户只能通过 Auth 角色上的策略上传到私有路径,如下所示:

arn:aws:s3:::BUCKET_NAME/${cognito-identity.amazonaws.com:sub}/*

用户通过 aws javascript sdk 直接从 Web 浏览器上传。

现在这很好用,我的用户仅限于他们上传的位置。他们上传的文件最终在存储桶中的路径如下所示:

us-east-1:0f26319c-1233-4c71-afb6-fac96a798ffb/random_file_name.txt

然后,我有一个 lambda,每当添加文件时都会从这个 S3 存储桶触发。为了澄清,用户不调用 lambda

问题:

我想从 lamda 访问用户池中的用户属性。我认为我可以使用 cognito-identity 子进行此查找。但是,我似乎找不到使用 SDK api 的方法来允许这样做。

使用此 api: http ://boto3.readthedocs.io/en/latest/reference/services/cognito-identity.html#CognitoIdentity.Client.describe_identity 我能够获得登录名/用户池,但不能获得与相关联的用户名此身份 ID。

如果我有用户名,那么我可以使用 api:http ://boto3.readthedocs.io/en/latest/reference/services/cognito-idp.html?highlight=cognito#CognitoIdentityProvider.Client.admin_get_user

任何想法如何使用联合身份 ID 来查找用户的属性?

0 投票
1 回答
2461 浏览

node.js - AWS Cognito SDK Node.JS 实施

我正在为我正在使用 node.js 构建的 API 开发服务器,并且需要使用 AWS Cognito。在此之前,我们在客户端开发了一个使用 AWS SDK 的应用程序的工作版本,我目前正在尝试将该功能转换到服务器端。我正在努力寻找一种好的方法来做到这一点,并且有一些具体的问题,如果得到回答,可能会让我得到我正在寻找的实现。基本上,我想知道 AWSCognito 对象是什么以及如何访问它,就像我在下面的代码行中看到的那样。

目前我的代码是使用完整的 AWS 开发工具包设置的,使用 [a] 安装并使用 [b] 在我的代码中访问。

有没有办法从我的 AWS 对象访问这个 AWSCognito 对象?如果是这样,我该怎么做?如果没有,我如何访问它/甚至可以访问它吗?

编辑:概括地说,我只想访问以下功能,不知道如何从 node.js 服务器访问它们-

  1. userPool.signUp(用户名、密码、属性、回调)
  2. cognitoUser.confirmPassword(验证,新密码,{})
  3. cognitoUser.forgotPassword({})
  4. cognitoUser.authenticateUser(authenticationDetails, {})
  5. userPool.getCurrentUser()
  6. cognitoUser.getSession(回调)
  7. cognitoUser.confirmRegistration(验证,布尔,回调)
  8. cognitoUser.updateAttributes(属性列表,回调)
  9. cognitoUser.getUserAttributes(回调)

编辑:更新 1

AWSCognito 对象是由 AWS Cognito 开发工具包设置为窗口中的全局变量的东西。这是一个仅在客户端工作的过程(是的,我知道有一些 hacky 解决方案可以在我的服务器上模拟一个窗口,我不想使用这些)。服务器端是否有可以访问和调用函数的等效对象?

0 投票
1 回答
15316 浏览

javascript - Aws Cognito:如何在用户注册时将用户分配给用户组

我在 aws cognito 中有以下用户组。管理员会员 付费会员

我想在他们注册我的应用程序时将所有用户默认分配给成员用户组,以便我可以在该用户组上分配不同的 IAM 角色。

如何以编程方式将用户分配给用户组?

0 投票
1 回答
829 浏览

stripe-payments - AWS Lambda 条带支付后端,PCI 问题?

我希望构建一个移动应用程序,将信用卡信息发送到 aws-lambda 微服务,然后将该信息提交给 Stripe。我担心 PCI 合规性/安全性,我想知道我是否缺少某些东西。以下是我的计划:

1) 用户使用符合 PCI 的密码登录 - 并被分配唯一的 ID 并获得 cognito 访问密钥。

2) 用户在移动应用程序中输入支付信息。然后,该应用程序使用 HTTPS 通过 POST 请求将该信用卡数据发送到经过 cognito 身份验证的 aws-lambda 实例(api 网关用于创建端点)。

3) 成功发布请求后,应用程序会删除本地信用卡数据。

4) lambda 实例使用 KMS 解密加密的条带秘密访问密钥。

5) lambda 实例使用 Stripe NodeJS sdk 将数据发送到条带并将条带标记存储在数据库中。

6) Lambda 实例绝不会保存任何信用卡数据——它只会将 Stripe 令牌写入数据库。

我在这里有什么遗漏吗?有什么我应该担心的吗?

编辑:

附加信息:信用卡详细信息在应用程序内收集并存储在应用程序状态,直到它们被删除。https POST 不使用 Stripe 工具,因为我使用的是 React Native。

0 投票
1 回答
760 浏览

amazon-web-services - 托管在 Amazon WS 上的微服务应用程序中的用户身份验证

我正在构建基于微服务架构的 Web 应用程序。目前,我正在考虑几种用户身份验证流程。我预测以下示例用户角色:

  • 管理员 - 能够创建内容、上传文件等(管理员帐户只能由另一个管理员创建)
  • 未经授权的用户 - 可以查看内容
  • 授权用户 - 可以评论内容

到目前为止,我是如何考虑身份验证流程的:

  • 身份验证服务 - 可以使用用户凭据和权限访问数据库
  • api gateway - 检索用户的请求,检查用户是否已登录(即使用身份验证服务验证 OAuth2 访问令牌)并根据用户请求将流量转移到其他服务(附加 JWT 令牌和一些基本用户信息)
  • 另一个服务 - 只接受来自 api 网关的请求,并信任来自 JWT 令牌的用户数据(不需要连接 auth 服务来获取有关用户的信息)。

在 AWS 基础设施上部署了一些东西之后,我的思维方式发生了一些变化。据我了解 AWS 产品(Lambda - 无服务器应用程序和 API 网关),我应该按如下方式实现身份验证流程:

  • 身份验证服务 - 获取用户请求,从 dynamoDB 检索数据,并为用户 cookie 提供由私钥签名的 JWT
  • 任何其他服务 - 使用 JWT 令牌检索请求,使用公钥验证签名,并执行一些操作。

现在问题来了:

deos AWS Cognito 如何适合这里?对我有用吗?据我了解,Cognito 简化了通过第三方(facebook、twitter 等)验证用户的流程。AWS Cognito 是否提供与我的应用程序分开的登录页面,或者它只是后台/网络服务实施?

到目前为止,我正在考虑将 Cognito 作为我的替代品authentication service——我的任何服务都应该执行由亚马逊 SDK 提供的 Cognito 身份验证流程,并且我的静态网站将为用户登录/注册实现 JavaScript SDK。我对吗?

0 投票
2 回答
1381 浏览

android - 基于用户组的 AWS API Gateway 自定义授权方

我正在尝试设计一个系统,在该系统中在我的 AWS 用户池中创建用户并将其分配给四个用户组之一。这些用户组具有附加到他们的角色,这些角色指定了他们被允许进行的 API 调用。我为每个组创建了一个用户,并且能够在我的 Android 应用程序中成功登录到他们。我的用户池也附加到一个身份池,用于使用身份联合处理单点登录。

问题是,当我登录用户时,不是假设分配给用户组的角色,而是分配给用户的角色似乎来自身份池而不是他们的用户组,因此他们无法进行他们应该有权访问的 api 调用。

我试图通过在 Node.js 中实现自定义授权器来解决此问题,但脚本似乎遇到了一些问题。每当它进入ValidateToken()方法时,它都无法说明令牌不是 JWT 令牌。

谁能确定这个脚本的问题,或者帮助我确定为什么设置的令牌不是有效的 JWT 令牌?令牌由 Android 应用程序使用 AWS Cognito 开发工具包发送。

编辑:经过进一步调查,从 event.authorizationToken 检索到的令牌具有以下格式([VALUE] 块用于隐藏潜在的敏感信息):

0 投票
1 回答
522 浏览

amazon-web-services - AWS Cognito - 当 ID 令牌需要刷新时,getSessionInBackground 失败

我的 ID 令牌有效期为一小时。一小时后,当我在服务调用中对 CognitoUser 对象调用 getSessionInBackground 时,我的调用失败。如果前一个 ID 令牌已过期,这不应该返回一个新的 ID 令牌吗?这种行为不能始终如一地重现并无济于事 - 它只发生在某些屏幕上。此外,它似乎只发生在 Android 中,而不是 iOS。