创建账户状态为“CONFIRMED”且没有电子邮件地址的 AWS Cognito 用户

Posted

技术标签:

【中文标题】创建账户状态为“CONFIRMED”且没有电子邮件地址的 AWS Cognito 用户【英文标题】:Create AWS Cognito user with account status "CONFIRMED" and without email address 【发布时间】:2020-01-10 20:48:45 【问题描述】:

如何创建一个使用 c# 确认帐户状态的 Cognito 用户?创建用户后,帐户状态将显示 FORCE_CHANGE_PASSWORD。另一件事是我需要创建没有电子邮件地址的用户。

 AmazonCognitoIdentityProviderClient cognitoProvider = 
            new AmazonCognitoIdentityProviderClient(region);

 string userName = "user";
 string tempPassword = "Temp@3434";
 string newPassword = "RealPass@2019";

 AdminCreateUserRequest adminUserCreateRequest = new AdminCreateUserRequest()
 
     UserPoolId = poolId,
     Username = userName,
     TemporaryPassword = tempPassword 
 ;

 AdminCreateUserResponse signUpResponse = await cognitoProvider.AdminCreateUserAsync(adminUserCreateRequest);

管理员发起请求

 Dictionary<string, string> initialParams = new Dictionary<string, string>();
        initialParams.Add("USERNAME", userName);
        initialParams.Add("PASSWORD", tempPassword);

        AdminInitiateAuthRequest initialRequest = new AdminInitiateAuthRequest()
        
            AuthFlow = AuthFlowType.ADMIN_NO_SRP_AUTH,
            AuthParameters = initialParams,
            ClientId = appClientId_tenantApi,
            UserPoolId = poolId                
        ;

        AdminInitiateAuthResponse resInitAuth = await cognitoProvider.AdminInitiateAuthAsync(initialRequest);

InitiateAuthRresponse 将电子邮件作为必需属性。 [requiredAttributes, ["userAttributes.email"]]

但是文档没有这么说。

对于 ADMIN_NO_SRP_AUTH:USERNAME(必需)、SECRET_HASH(如果应用客户端配置了客户端密码)、PASSWORD(必需)、DEVICE_KEY

管理员响应挑战

 var authParameters = new Dictionary<string, string>();
            authParameters.Add("USERNAME", userName);
            authParameters.Add("NEW_PASSWORD", newPassword);

        AdminRespondToAuthChallengeRequest adminAuthRequest = new AdminRespondToAuthChallengeRequest()
        
            UserPoolId = poolId,
            ClientId = appClientId_tenantApi,
            ChallengeName = ChallengeNameType.NEW_PASSWORD_REQUIRED,
            ChallengeResponses = authParameters,
            Session = session
            ;

cognitoProvider.AdminRespondToAuthChallengeAsync(adminAuthRequest);

我想我可能会错过 Cognito 中的一些用户设置以避免电子邮件。有没有人有类似的经历?或者这不可能在没有电子邮件的情况下创建用户?

【问题讨论】:

【参考方案1】:

    在创建用户池期间,在常规设置下;属性如照片cognito creation on aws 需要选择必须存在的属性,我相信在您的情况下,默认情况下选择了电子邮件,因此是质询请求你得到的回应。

    管理员创建用户请求要求客户端确认电子邮件,以验证用户拥有该电子邮件。

    同样的方法是允许用户在您的 cognito 配置上注册,然后注册某人,然后输入用户名和密码,然后继续确认他们是管理员

    var signup = await cognitoClient.SignUpAsync(new SignUpRequest
    
        Username = person.Username,
        ClientId = cognitoOptions.ClientId,
        Password = person.IdNumber,
    );
    
     var confirm = await cognitoClient.AdminConfirmSignUpAsync(new AdminConfirmSignUpRequest
    
        Username = person.Username,
        UserPoolId = cognitoOptions.UserPoolId
    );
    

【讨论】:

以上是关于创建账户状态为“CONFIRMED”且没有电子邮件地址的 AWS Cognito 用户的主要内容,如果未能解决你的问题,请参考以下文章

贝宝沙盒账户错误状态

如何给oracle账户解锁

win7显示引用的帐户当前已锁定,且可能无法登录,怎么解除锁定?

EKEvent 接受活动邀请

如何在laravel 5.2登录时检查电子邮件(确认/否)?

executequery要求已打开且可用的connection,连接的当前状态为已关闭