我正在尝试使用其用户池服务在AWS上设置移动应用程序身份验证系统。
由于它只是移动应用,我只需要像WhatsApp这样的OTP / MFA确认选项,在这里我遇到了第一次挑战。
用户池强制要求用户名和密码,因为我使用的是内置MFA,我使用了phone_number属性。我不需要任何用户名或密码。这就是我的计划。
我担心的是,如果完成登录过程必须使用MFA,那么使用硬编码密码是可以的吗?是否可以将用户池帐户分配给未经身份验证的身份并对其进行身份验证(为什么?因为我在注册过程中使用该身份作为用户名而我不想要该用户池帐户的其他身份,而尝试此操作时我得到了虽然有多个随机错误?
答案 0 :(得分:3)
我想stackoverflow不想要建议或建议,所以我会尝试将答案格式化为我认为你问的问题的答案,这是#34; Cognito系统中的角色是什么以及如何与他们一起实施我的应用程序"。 (这是我一直试图为自己回答一个月或更长时间的问题)。我的答案是根据IOS SDK API进行描述的,但通常适用。
Cognito Identity会向您发出IdentityId"",但不会使用用户名或密码等管理这些身份的身份验证。
因此,如果您希望对活动有任何限制或控制,则需要某种注册过程。这可以使用Facebook身份,Google+身份或您自己的身份(称为BYOI带来您自己的身份)或新的Cognito用户池(由AWS提供的身份提供商)。 (所有这些"身份提供商"在幕后提供某种令牌和身份提供商名称)。这些都没有提供IdentityId,即Cognito Identity的工作。
Cognito凭据提供程序将CognitoIdentity IdentityId连接到AWS中的IAM角色,以便您可以临时获取IdentityId的AWS凭据,并使用S3,Lambda,DynamoDb等。
因此,不使用用户名和密码,意味着您没有任何身份验证,但您仍然可以拥有身份,Cognito身份将维护身份,并且它们将是唯一的(在移动设备之后)。但是用户将无法移动到另一台设备并保持相同的身份,因为他/她无法告诉Cognito他/她的身份。这就是身份提供商所做的事情(他们通过要求输入密码/ mfa等来检查你是不是在说谎。)
API和SDK的命名很难理解,但基本上以CognitoIdentity开头没有单词Provider的类意味着该组件是Federated Identity系统的一部分,而以CognitoIdentityProvider开头的类是验证设备/用户是谁/它说的是什么。 CognitoIdentityProviderManager返回CognitoIdentityProvider名称(如" graph.facebook.com"或cognito-idp.us-east-1.amazonaws.com/)和令牌(和OpenID Connect令牌(OIDC))到让CognitoIdentity系统知道该用户已登录(它通过将[name:token]的登录字典返回到CognitoIdentity来实现。后台Cognito使用Open Id连接服务器或其他服务器(IE facebook)验证此令牌。
所以问题是,你如何唯一地识别你的用户(我不知道whatsapp)。