标签: amazon-cognito

如何从 lambda 函数内部访问 Cognito 用户池?

我在我的应用程序中使用 AWS Amplify 进行身份验证。我使用电子邮件地址作为 MFA 的用户名和电话号码。但是,我还需要电话号码是唯一的,因此我创建了这个预注册 lambda 触发器:

const aws = require('aws-sdk');

exports.handler = async (event, context, callback) => {
  const cognito = new aws.CognitoIdentityServiceProvider();

  const params = {
    AttributesToGet: [],
    Filter: `phone_number = "${event.request.userAttributes.phone_number}"`,
    Limit: 1,
    UserPoolId: event.userPoolId,
  };

  try {
    const result = await cognito.listUsers(params).promise();
    if(result.Users.length === 0) {
        callback(null, event);
    } else {
        const error = new Error("Phone number has already been used.");
        callback(error, event);
    }
  } catch (err) {
      console.log(err);
  }
};
Run Code Online (Sandbox Code Playgroud)

但是,该函数返回以下错误:

validatePhoneNumber-dev 无权在资源:xxx 上执行:cognito-idp:ListUsers …

amazon-cognito aws-lambda aws-amplify

1
推荐指数
1
解决办法
3198
查看次数

如何使用 python 以编程方式交换授权代码以从 cognito 获取访问令牌

我一直在寻找有关如何交换authorization_code以实用地从cognito获取访问令牌的解决方案。我创建了认知池和集成应用程序客户端。因此,当我以以下格式调用登录域时,我会获取登录页面并能够登录/注册

https://<your_domain>/login?response_type=code&client_id=<your_app_client_id>&redirect_uri=<your_callback_url>
Run Code Online (Sandbox Code Playgroud)

现在上面的url将返回authorization_code作为参数。我使用 post man 通过以下查询获取结果,该查询返回 id 令牌、访问令牌、刷新令牌。

POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token&
Content-Type='application/x-www-form-urlencoded'
grant_type=authorization_code&
client_id=myid&
code=AUTHORIZATION_CODE&
redirect_uri=http://localhost:5000/login
Run Code Online (Sandbox Code Playgroud)

现在我需要在我的应用程序中实现相同的方法来获取访问令牌下面是我尝试过的代码

 response = requests.post(url + '/oauth2/token',
                             auth=(App_client_id),
                             data={'grant_type': grant_type, 'code': accessCode, 'client_id': App_client_id,
                                   "redirect_uri":'http://localhost:5000/login'})
print(response.json())
Run Code Online (Sandbox Code Playgroud)

但我没有得到任何回应。

预期:我正在寻找如何实现以下用例

  1. 我有一个与 cognito 用户池/授权者关联的 api-gateway,并且该 api-gateway 从其他 aws 服务(例如 lambda)返回响应。

2.在我的应用程序 - Flask 应用程序中,我想以这样的方式放置一个逻辑:一旦用户在登录后通过用户池进行身份验证,它就会在redirect_uri中返回authorization_code。

  1. 在redirect_uri中,我有某些操作-读/写/删除任务。对于每项任务,我需要使用通过授权代码交换收到的访问令牌进行身份验证。因此只有登录的用户才能从重定向 uri 执行操作。

感谢有人可以帮助解决这个问题吗?

谢谢

api oauth-2.0 python-3.x amazon-cognito

1
推荐指数
1
解决办法
4300
查看次数

在 Cognito 中的特定用户上获取 UserNotFoundException

我正在使用 cognitoUser.authenticateUser 来验证用户身份。这适用于我在 Cognito 中拥有的所有 30 个用户,除了一名用户。(AWS.CognitoIdentityServiceProvider.CognitoUser)

具体来说,我可以通过用户名而不是经过验证的电子邮件地址对用户进行身份验证。这是我无法通过电子邮件地址进行身份验证的唯一用户。传递电子邮件地址时,调用会返回 UserNotFoundException。

该用户的设置与其他用户完全相同,验证的电子邮件地址也非常简单。

在此输入图像描述

电子邮件:foo@bar.com

amazon-cognito

1
推荐指数
1
解决办法
2465
查看次数

AWS cognito 无需密码登录

我正在使用 AWS cognito 和 Spring Boot 制作一个应用程序。注册后,用户通过电子邮件或短信激活码确认其帐户。他们确认帐户后,我可以进行自动会话登录吗?我可以在没有密码的情况下仅在确认情况下启动会话吗?

authentication spring amazon-web-services amazon-cognito

1
推荐指数
1
解决办法
4123
查看次数

AWS Cognito 在尝试登录时出现 BadRequest 错误

我试图实现 AWS cognito spring boot 示例,如此处所述

我在单击“使用 Amazon Cognito 登录”时收到以下错误:

{"code":"BadRequest","message":"The server did not understand the operation that was requested.","type":"client"}
Run Code Online (Sandbox Code Playgroud)

URI 是:

https://cognito-idp.{region}.amazonaws.com/{my-pool-id}/authorize?response_type=code&client_id={my-client-id}&scope=openid&state=NHfXN1aWjqUWiRBp0FZzIoZYHx-EmcuUp8sGDKUaODs%3D&redirect_uri=http://localhost:8080/login/oauth2/code/cognito&nonce=CgC_P_GCnLlHQ4W_9nT04hzwkjaDdPGs7OaLaklP0wU
Run Code Online (Sandbox Code Playgroud)

以下配置是我自己在排查问题时验证的。

  1. 客户端 ID、客户端密码、池 ID、区域等与我的 AWS 控制台中的配置完全相同。这里没有错误。

  2. 我正在使用 Cognito 提供的 UI 进行登录。域已添加并验证 Cognito UI 正在重定向到登录屏幕。

  3. 应用程序客户端设置中的回调 URI 与我的配置中的重定向 ui 相同。

我的示例配置文件链接到此处以供参考。

你能告诉我这里出了什么问题吗?我在这里错过了什么吗?

spring spring-security amazon-web-services spring-boot amazon-cognito

1
推荐指数
1
解决办法
1万
查看次数

Amazon Cognito - 使用客户端凭证流时可以向 access_token 添加自定义声明吗

我使用 Amazon Cognito 作为授权服务器。我设法设置所有内容并使用客户端凭据获取 access_token,但现在我需要向令牌添加自定义声明。是否可以?

amazon-web-services amazon-cognito

1
推荐指数
1
解决办法
844
查看次数

AWS Amplify SDK 在放大推送时失败([unauthRoleName、authRoleName] 缺失)

我正在为我的公司开发一个应用程序,该应用程序利用带有 lambda 函数的 API 网关 REST 端点和 cognito 用户池(带有组)进行授权。

我昨天尝试添加一个新端点,收到了角色策略太大(超过 X 字节)的错误 - 在研究此问题后,我发现较新版本的 AWS amplify CLI(即 4.50.0)通过整合来规避此问题并结合类似的内联策略来减少总大小。

我升级到此版本的 Amplify CLI,发现这个问题已得到解决,但随后我遇到了另一个问题...在尝试通过 推送任何更改时amplify push,我现在收到以下错误:

Parameters: [unauthRoleName, authRoleName] do not exist in the template

这个错误指的是什么“模板”,我该如何解决它?在谷歌搜索后,我看到了一些潜在的解决方案,但没有一个真正对我有用,而对于那些确实有用的人来说,这只是一个临时解决方案。最终,如果我需要继续做一些事情作为临时修复,那么我会接受它并且它会做,但我想知道如何永久解决这个问题,因为我认为肯定缺少一些东西无论是在我这边还是在 AWS 云上...也许是升级 CLI 之前遇到的初始错误的产物?

感谢您的帮助,非常感谢:)

amazon-web-services aws-cloudformation amazon-cognito aws-lambda aws-amplify

1
推荐指数
1
解决办法
1836
查看次数

使用 AWS Java SDK v2.x 的 Cognito SRP

我需要使用 AWS cognito 获取令牌,然后调用秘密 API。我有这个可以运行的 python 脚本。如何将其转换为 Java SDK v2?

我找到了一个使用 Java SDK V1 的示例,但它不适用于 v2。

from warrant.aws_srp import AWSSRP
username = "user"
password = "pass"
client_id = "xxxxxxxxxxxxxxxxx"
user_pool_id = "us-east-1_xxx123445"
region = "us-east-1"
aws = AWSSRP(username=username, password=password, pool_id=user_pool_id, client_id=client_id)
tokens = aws.authenticate_user()
print(tokens)
Run Code Online (Sandbox Code Playgroud)

java amazon-web-services amazon-cognito aws-java-sdk-2.x

1
推荐指数
1
解决办法
1571
查看次数

如何将电子邮件添加到 Cognito 访问令牌?

我正在使用 AWS Cognit,在验证访问令牌时,我需要提取电子邮件属性来处理应用程序的数据库和 Cognito 之间的一些迁移案例。

但问题是我在令牌中找不到电子邮件;相反,我得到一个用户名,它是一个 UUID。

有什么方法可以将电子邮件包含到访问令牌中(无需额外调用预令牌生成-lambda)?

authentication oauth-2.0 amazon-cognito

1
推荐指数
1
解决办法
2137
查看次数

将支付服务提供商与AWS Cognito用户集成

背景

我是一名前端开发人员,我正在寻找能够处理我的最终用户登录,他们的数据和付款的BaaS.

我正在考虑使用AWS Cognito,因为它可以卸载(间接)整个创建用户/登录/忘记密码进程,并向其他AWS服务(如S3和DynamoDB)授予细粒度访问权限(我想存储客户数据).

问题

我想向我的用户提供免费增值服务,因此我希望与Stripe或Amazon Payments等支付服务提供商集成.遗憾的是,我不明白这种集成在概念上是如何运作的,以及它将如何实际完成.

  1. 最终用户将登录我将使用Cognito的"我的网站".
  2. 最终用户将通过Stripe付款.
  3. Stripe会以某种方式知道哪些最终用户登录到Cognito,而Cognito会知道最终用户通过Stripe向我的帐户付款.
  4. 我将使用Cognito Sync将付款信息存储在他的帐户中,并授予他权限 - 例如 - 上传特定的S3存储桶.

payment-gateway amazon-web-services stripe-payments amazon-cognito

0
推荐指数
1
解决办法
1261
查看次数