我在我的应用程序中使用 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 …
我一直在寻找有关如何交换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)
但我没有得到任何回应。
2.在我的应用程序 - Flask 应用程序中,我想以这样的方式放置一个逻辑:一旦用户在登录后通过用户池进行身份验证,它就会在redirect_uri中返回authorization_code。
感谢有人可以帮助解决这个问题吗?
谢谢
我正在使用 cognitoUser.authenticateUser 来验证用户身份。这适用于我在 Cognito 中拥有的所有 30 个用户,除了一名用户。(AWS.CognitoIdentityServiceProvider.CognitoUser)
具体来说,我可以通过用户名而不是经过验证的电子邮件地址对用户进行身份验证。这是我无法通过电子邮件地址进行身份验证的唯一用户。传递电子邮件地址时,调用会返回 UserNotFoundException。
该用户的设置与其他用户完全相同,验证的电子邮件地址也非常简单。
电子邮件:foo@bar.com
我正在使用 AWS cognito 和 Spring Boot 制作一个应用程序。注册后,用户通过电子邮件或短信激活码确认其帐户。他们确认帐户后,我可以进行自动会话登录吗?我可以在没有密码的情况下仅在确认情况下启动会话吗?
我试图实现 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)
以下配置是我自己在排查问题时验证的。
客户端 ID、客户端密码、池 ID、区域等与我的 AWS 控制台中的配置完全相同。这里没有错误。
我正在使用 Cognito 提供的 UI 进行登录。域已添加并验证 Cognito UI 正在重定向到登录屏幕。
应用程序客户端设置中的回调 URI 与我的配置中的重定向 ui 相同。
我的示例配置文件链接到此处以供参考。
你能告诉我这里出了什么问题吗?我在这里错过了什么吗?
spring spring-security amazon-web-services spring-boot amazon-cognito
我使用 Amazon Cognito 作为授权服务器。我设法设置所有内容并使用客户端凭据获取 access_token,但现在我需要向令牌添加自定义声明。是否可以?
我正在为我的公司开发一个应用程序,该应用程序利用带有 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
我需要使用 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) 我正在使用 AWS Cognit,在验证访问令牌时,我需要提取电子邮件属性来处理应用程序的数据库和 Cognito 之间的一些迁移案例。
但问题是我在令牌中找不到电子邮件;相反,我得到一个用户名,它是一个 UUID。
有什么方法可以将电子邮件包含到访问令牌中(无需额外调用预令牌生成-lambda)?
背景
我是一名前端开发人员,我正在寻找能够处理我的最终用户登录,他们的数据和付款的BaaS.
我正在考虑使用AWS Cognito,因为它可以卸载(间接)整个创建用户/登录/忘记密码进程,并向其他AWS服务(如S3和DynamoDB)授予细粒度访问权限(我想存储客户数据).
问题
我想向我的用户提供免费增值服务,因此我希望与Stripe或Amazon Payments等支付服务提供商集成.遗憾的是,我不明白这种集成在概念上是如何运作的,以及它将如何实际完成.
payment-gateway amazon-web-services stripe-payments amazon-cognito
amazon-cognito ×10
aws-amplify ×2
aws-lambda ×2
oauth-2.0 ×2
spring ×2
api ×1
java ×1
python-3.x ×1
spring-boot ×1