标签: aws-cognito

Cognito托管的UI

我一直在研究为Web应用程序设置登录,让客户端查看S3中托管的数据,并发现AWS Cognito有一个托管的Web UI [link],可以为我处理大部分身份验证流程,我面临的问题是我无法找到如何将Web UI的输出集成到我的应用程序中.Cognito中的大多数现有文档仅引用了如何使用各种AP​​I来创建自己的UI,这让我对我的问题的答案感到困惑.

是否有任何使用Cognito托管UI创建的信息?

亚马逊表示,您可以在几分钟内将经过身份验证的登录与Cognito集成,但我已经看了几周而且无法弄明白.

javascript amazon-s3 amazon-web-services amazon-cognito aws-cognito

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

如何修改AWS Cognito用户池的访问和标识令牌的到期时间

我找不到任何文档说明是否以及如何修改AWS Cognito用户池的访问和身份令牌的到期时间.

文件规定,在默认情况下排放期满后1小时.

有没有办法修改到期时间?

amazon-web-services amazon-cognito aws-cognito

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

AWS Cognito用户名/电子邮件登录区分大小写

建立

我使用AWS Cognito来管理我的Web应用程序的用户注册和用户访问.具体来说,我使用的是Cognito托管的UI.这意味着Cognito为我的用户提供了一个用户注册用户界面,我没有权限修改我的应用程序的用户注册或登录页面(除了Cognito提供的控件).我使用电子邮件地址作为用户名,因此只需要新用户提供电子邮件地址和密码.

在此输入图像描述

问题

Cognito将电子邮件地址视为区分大小写.如果用户使用电子邮件地址JOHN_smith@randommail.com注册,则他们无法使用john_smith@randommail.com登录.

我希望注册和登录的用户电子邮件地址不区分大小写.

我试过了什么

通常,在将电子邮件地址发送到服务器之前,通过在客户端中将电子邮件地址设置为小写来处理这一点很简单.但是我无法访问由Cognito托管的客户端UI.

因此,我的计划是尝试使用Cognito预注册触发器调用的Lambda函数来小写用户提供的电子邮件.

预注册

当用户尝试注册(注册)时,Amazon Cognito会调用此触发器,允许您执行自定义验证以接受或拒绝注册请求.

这是我写的lamdba函数:

'use strict';

console.log('Loading function');

exports.handler = (event, context, callback) => {
    console.log('Received event:', JSON.stringify(event, null, 2));

    var triggerSource = event.triggerSource;
    console.log('Received triggerSource:', triggerSource);

    var email = event.request.userAttributes.email;
    console.log('Received email:', email);

    var modifiedEvent = event;

    if (email !== null) {
        var lowerEmail = email.toLowerCase();
        modifiedEvent.request.userAttributes.email = lowerEmail;
        console.log('Set email in request to', lowerEmail);
        console.log('Modified event:', JSON.stringify(modifiedEvent, null, 2));
    } else {
        console.log('Email evaluated as NULL, exiting …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-cognito aws-cognito

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

如何访问Cognito用户帐户的组?

在AWS Cognito中,您可以将用户添加到组(首次创建组之后).用户可以属于一个或多个组.

使用JavaScipt SDK(https://github.com/aws/amazon-cognito-identity-js),有没有办法读取分配的组?会aws-sdk提供访问权限amazon-cognito-identity-js吗?

amazon-cognito aws-sdk aws-cognito

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

如何使用确认URL确认amazon cognito后重定向?

我想在亚马逊认知用户确认后重定向到特定网址.

当用户注册时,他将收到带有验证链接的确认邮件,如下所示 :https:// <> .auth.us-west-2.amazoncognito.com/confirmUser?client_id = << >>&user_name = << >>&confirmation_code = << >>

如果用户点击上述链接,它将重定向到确认页面.

用户确认完成后,页面应重定向到我的应用程序.

请给我一些解决这个问题的想法.

amazon-web-services amazon-cognito aws-sdk aws-cognito

20
推荐指数
3
解决办法
6783
查看次数

AWS Cognito的SMS多重身份验证返回无效代码或身份验证状态

我正在尝试Cognito使用他们的Go 实现基于身份验证SDK.我已经能够使基本username/password身份验证工作,但当我添加2因素身份验证时,SMS我遇到了困难.

重现步骤 :

  1. 我使用用户名/密码和电子邮件验证创建用户
  2. 我验证了电子邮件地址
  3. 我设置了电话号码并申请了验证码
  4. 我验证了电话号码
  5. 我启用双因素身份验证(通过短信)
  6. 我尝试登录并接收SMS_MFA质询
  7. 我在手机上收到了代码并致电AdminRespondToAuthChallenge

问题,我收到了error:

CodeMismatchException: Invalid code or auth state for the user.
status code: 400, request id: 1513894e-8efa-11e8-a8f8-97e5e083c03b
Run Code Online (Sandbox Code Playgroud)

SMS验证码当然是正确的,因此它似乎必须与auth状态有关.

对Cognito的调用如下所示:

c.cip.SignUp(&cognitoidentityprovider.SignUpInput{
        ClientId: aws.String(c.clientID),
        Username: aws.String(username),
        Password: aws.String(password),
        UserAttributes: []*cognitoidentityprovider.AttributeType{
            {
                Name:  aws.String("email"),
                Value: aws.String(email),
            },
            {
                Name:  aws.String("name"),
                Value: aws.String(fullName),
            },
        },
    })

c.cip.ConfirmSignUp(&cognitoidentityprovider.ConfirmSignUpInput{
    ClientId:         aws.String(c.clientID),
    Username:         aws.String(username),
    ConfirmationCode: aws.String(code),
})


//Add the phone number
c.cip.AdminUpdateUserAttributes(&cognitoidentityprovider.AdminUpdateUserAttributesInput{
            UserPoolId: aws.String(c.userPoolID),
            Username:   aws.String(username),
            UserAttributes: …
Run Code Online (Sandbox Code Playgroud)

go aws-cognito

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

当我尝试使用AWS Cognito登录时,我得到一个关于我的自定义Lambda触发器的AccessDeniedException

我正在调用adminInitiateAuth并为我自己的lambda返回一个奇怪的AccessDeniedException.

这是我正在调用的代码:

      var params = {
        AuthFlow: "ADMIN_NO_SRP_AUTH",
        ClientId: "@cognito_client_id@",
        UserPoolId: "@cognito_pool_id@",
        AuthParameters: {
          USERNAME : username,
          PASSWORD : tempPassword
        },
      };
      cognitoIdentityServiceProvider.adminInitiateAuth(params, function(error, data) {
        if (error) {
          console.log("ERROR! Login failed: " + JSON.stringify(error), error.stack);
        } else {
          console.log("Login sent back: " + JSON.stringify(data));
        }
      });
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是:

ERROR! Login failed: {"message":"arn:aws:lambda:us-east-1:201473124518:function:main-devryan-users_onCognitoLogin failed with error AccessDeniedException.","code":"UnexpectedLambdaException","time":"2017-02-25T18:54:15.109Z","requestId":"ce42833f-fb8b-11e6-929b-2f78b63faa12","statusCode":400,"retryable":false,"retryDelay":1.0853444458916783} UnexpectedLambdaException: arn:aws:lambda:us-east-1:201473124518:function:main-devryan-users_onCognitoLogin failed with error AccessDeniedException.
Run Code Online (Sandbox Code Playgroud)

有谁知道我为什么会收到这个错误?

amazon-cognito aws-cognito

18
推荐指数
3
解决办法
4963
查看次数

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

通过阅读Cognito Identity Provider文档,我了解到它似乎提供了与Facebook/Google/Twitter作为身份提供商的开箱即用集成.

我的应用程序是一个以开发人员为中心的应用程序,因此我希望除了上述身份提供商的帐户之外,还允许用户使用他们的Github帐户进行注册/登录.那可能吗?

如果可能的话,我需要做多少额外的工作(比较开箱即用的Facebook/Google社交注册功能)?

single-sign-on oauth-2.0 openid-connect amazon-cognito aws-cognito

18
推荐指数
2
解决办法
1950
查看次数

AWS Cognito Workflow:使用主用户名的电子邮件别名

因此,我试图了解AWS Cognito,但我遇到了一些问题.

所以,现在我可以注册一个帐户,并验证并登录.简单就够了.边缘的情况是我的墙壁.

这是我到目前为止的信息:

这就是我的优势所在.

如果一个用户注册,但立即确认:

  • 他们被叫走了
  • 也许应用程序崩溃了
  • 他们失去了联系
  • 他们的电池坏了
  • 他们强行退出
  • app get被意外删除.

在他们看来,他们已注册但未验证他们的帐户.在这一点上,它实际上没有办法验证他们认为他们注册的帐户.我猜它可以通过消息解决:

"在您验证电子邮件地址之前,警告您的帐户不会被创建." 或类似的规定.无论如何...

  • 他们不能尝试登录,因为他们不会知道被随机分配为他们的UUID username.
  • 即使不是这种情况,他们也提供了他们的电子邮件地址作为用户名.从用户的POV,他们甚至不知道他们username甚至可以是什么,因为他们只输入了他们的电子邮件地址.
  • 他们希望的最好方法是尝试再次注册.(假设他们阅读了上面的验证警告)在这种情况下,现在Cognito可能已经放弃了未经证实的帐户堆积.

"堆积"可能是一个过于强烈的短语,这可能是一个非常边缘的情况.

现在好的方面是,因为他们没有"验证"他们,email他们可以使用相同的email地址再次注册,因为email它没有得到唯一约束,直到它verified.如果有人试图验证已经验证的地址,他们会得到一个AliasExistsException.这实际上提出了一个我刚刚测试过的有趣点.

我可以使用电子邮件地址注册,然后验证该电子邮件地址,以便确认该帐户.然后,我可以右转并使用相同的电子邮件地址注册,在尝试使用重复的电子邮件地址验证该帐户之前,我没有收到正式的AWS错误.以前没有办法表明这个错误?我想期望开发人员在预注册触发器中编写验证服务:

当用户提交其信息以进行注册时,将调用此触发器,允许您执行自定义验证以接受或拒绝注册请求.

总结一下,并重申一下这个问题:

实际上,似乎需要在使用带有Cognito的电子邮件地址时需要预先注册Lambda,以确保不存在具有电子邮件的帐户,因为在验证尝试之前不会处理AWS异常制作.

我的假设在这里是否正确?根据这里的要求,我认为让用户知道电子邮件地址不能尽快提供是非常合理的.例如:

John …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cognito

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

在Cognito中查找标识池标识的位置

Cognito Console中的标识池在哪里.如文档中所述,它具有以下格式:

IdentityPoolId

标识为REGION:GUID的标识池标识.

但我只看到Pool IdPool ARN在控制台中.哪种格式不同.

amazon-web-services amazon-cognito aws-cognito

15
推荐指数
3
解决办法
6790
查看次数