我正在尝试使用其用户池服务在 AWS 上设置移动应用程序身份验证系统。
由于它是仅限移动设备的应用程序,因此我只需要 OTP/MFA 确认选项(如 Whatsapp),在这里我遇到了第一个挑战。
用户池强制需要用户名和密码,因为我使用其内置的MFA,所以我使用了phone_number属性。我不需要任何用户名或密码。这就是我的计划。
- 在我的认知凭据提供商中允许未经身份验证的身份。
- 已处理注册 [用户名 = 由 cognito 提供的身份,密码 =“somethingxyz”(是的,在软件中硬编码),phone_number = 提供的电话号码]
- 成功注册 otp 后,将我的 IdToken 传递给凭据提供商,并使用开始时创建的身份分配用户池用户。
我担心的是,如果必须执行 MFA 才能完成登录过程,使用硬编码密码是否可以?是否可以将用户池帐户分配给未经身份验证的身份并对其进行身份验证(为什么?因为我在注册过程中使用该身份作为用户名,并且我不希望该用户池帐户有其他身份,在尝试此操作时,我得到了多个随机但有错误)?
最佳答案
我想 stackoverflow 不需要建议或建议,所以我会尝试将答案格式化为我认为您要问的问题的答案,即“Cognito 系统中的角色是什么以及如何实现我与他们的应用程序”。 (这是我一个月或更长时间以来一直试图为自己回答的问题)。我的答案是根据 IOS SDK API 进行描述的,但通常适用。
Cognito Identity 会向您颁发“IdentityId”,但不会使用用户名或密码等管理这些身份的身份验证。
因此,如果您想对事件进行任何限制或控制,则需要某种注册流程。这可以使用 Facebook 身份、Google+ 身份或您自己的身份(称为 BYOI 自带身份)或新的 Cognito 用户池(由 AWS 提供服务的身份提供商)。 (所有这些“身份提供商”在幕后提供某种 token 和身份提供商名称)。这些都不提供 IdentityId,这是 Cognito Identity 的工作。
Cognito 凭证提供程序将 CognitoIdentity IdentityId 连接到 AWS 中的 IAM 角色,以便您可以临时获取 IdentityId 的 AWS 凭证,并使用 S3、Lambda、DynamoDb 等。
因此,不使用用户名和密码,意味着您没有任何身份验证,但您仍然可以拥有身份,Cognito Identity 将维护它们,并且它们将是唯一的(在移动设备之后)。但用户将无法移动到另一台设备并保持相同的身份,因为他/她无法告诉 Cognito 他/她的身份。这就是身份提供商所做的(他们通过询问密码/MFA 等来检查您是否在撒谎)。
API 和 SDK 的命名非常难以理解,但基本上以 CognitoIdentity 开头且没有 Provider 一词的类意味着该组件是联合身份系统的一部分,而以 CognitoIdentityProvider 开头的类是用于验证设备/用户就是它所说的人/事。 CognitoIdentityProviderManager 返回一个 CognitoIdentityProvider 名称(例如“graph.facebook.com”或 cognito-idp.us-east-1.amazonaws.com/)和一个 token (和 OpenID Connect token (OIDC)),以让 CognitoIdentity 系统知道该用户已登录(它通过将 [name:token] 的登录字典返回到 CognitoIdentity 来实现这一点。Cognito 在幕后使用 Open Id 连接服务器或其他服务器(即 facebook)验证此 token 。
所以你的问题是,你如何唯一地识别你的用户(我不知道whatsapp)。
关于amazon-web-services - AWS Cognito 用户身份验证流程需要建议和建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39786640/