我可以以编程方式创建 AWS Cognito 用户登录吗?

Posted

技术标签:

【中文标题】我可以以编程方式创建 AWS Cognito 用户登录吗?【英文标题】:Can I create an AWS Cognito user login programmatically? 【发布时间】:2014-10-07 03:54:57 【问题描述】:

我希望我的应用程序允许拥有 Facebook、Google、Amazon... 等帐户的用户能够登录到我的应用程序。这可以通过 AWS Cognito 正常工作。

但是,如果用户没有任何登录名,应用程序是否可以通过编程方式创建用户登录名?

    用户将提供一个 id 和密码,应用程序会将信息发送到身份验证提供商以创建新的登录名/帐户。

    我不需要实现自己的身份验证机制,也不需要担心密码的存储方式等。

根据我的研究,我认为现有的身份验证提供程序甚至其他服务(例如 OpenID)都无法做到这一点。

如果我不想实现自己的登录存储和身份验证,您还有其他选择吗?它不一定需要与 AWS Cognito 集成。

【问题讨论】:

使用 FB/Google 登录不会将您带到可以登录或注册的页面吗? 我希望用户在注册时留在我的应用中,而不必打开浏览器或其他应用。 所有身份验证提供商都不希望第三方应用在其网站上创建帐户 - 例如,这是一个安全风险,因为您的应用将拥有用户的密码(OpenID 的目的之一是避免这种情况),这样的 API 对垃圾邮件发送者非常有吸引力。 【参考方案1】:

我对你的问题有点困惑。如果你问:

我可以通过编程方式在 Facebook/Google 上创建新的用户名和密码吗?

那么答案是否定的。您必须在他们的网站上注册 Facebook / Google。如果你问:

我可以使用仅存在于 Cognito 中的用户名和密码创建新用户吗?

那么答案是肯定的。为此,这取决于您是在浏览器中还是在服务器上创建用户。在浏览器中,使用Cognito javascript API。在服务器上,使用Cognito Admin Server APIs。

这里有一些示例代码,用于在 Node JS 中的服务器上创建新用户(用您自己的标记替换我的字符串,尤其是其中带有 @ 符号的那些):

  let params = 
    UserPoolId: "@cognito_pool_id@",
    Username: "jhancock",
    DesiredDeliveryMediums: ["EMAIL"],
    ForceAliasCreation: false,
    MessageAction: "SUPPRESS",
    TemporaryPassword: "somePassword",
    UserAttributes: [
       Name: "given_name", Value: "John",
       Name: "family_name", Value: "Hancock",
       Name: "name", Value: "John Hancock",
       Name: "email", Value: "john@gmail.com",
       Name: "phone_number", Value: "+15125551212"
    ],
  ;
  console.log("Sending params to cognito: " + JSON.stringify(params));
  let cognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider(region: "us-east-1");
  cognitoIdentityServiceProvider.adminCreateUser(params, function(error, data) 
    if (error) 
      console.log("Error adding user to cognito: " + JSON.stringify(error), error.stack);
     else 
      console.log("Received back from cognito: " + JSON.stringify(data));
    
 

如果你得到这个工作,你可能想看看这篇关于如何change the temporary password into a real one的帖子。

【讨论】:

我认为原始发帖人是在询问 cognito 联合身份,因为问题是从 2014 年开始的,用户池直到 2016 年才推出,但这是用户池的有效答案。 很公平。去年年底我第一次了解 Cognito 时,我发现了这个问题,这让我很困惑,你不能在 Cognito 中拥有用户。很高兴现在好多了。【参考方案2】:

您好,我之前在实施社交媒体身份验证方面的经验。 我会得出结论,这很难实现。如果您不显示 Web 视图以在 ios 中对用户进行身份验证,则需要为此使用 iOS ACAccountStore 类,但即使这样也只能提供登录不登录的机会.

【讨论】:

以上是关于我可以以编程方式创建 AWS Cognito 用户登录吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android 应用程序中的 AWS Amplify Cognito 身份验证错误

AWS cognito 新密码延续 - Android

如何使用适用于AWS Cognito的AD FS SAML?

在创建用户时,如何在 AWS Cognito 中设置一些必需的属性?

如何继续使用适用于 AWS Cognito 的 AD FS SAML?

AWS Amplify AppSync 使用在 Cognito 中创建的 Google 用户登录