具有多个设备的iOS AWS Cognito身份验证

具有多个设备的iOS AWS Cognito身份验证,ios,amazon-web-services,authentication,amazon-cognito,Ios,Amazon Web Services,Authentication,Amazon Cognito,我们正在开发一个iOS应用程序,该应用程序使用未经验证的Cognito访问权限。我们现在添加了一个身份提供者:Cognito用户池 我们看到,当设备A进行登录过程时,从未经身份验证到经过身份验证,Cognito ID保持不变(如预期的那样)。然后,当设备B登录时,未经身份验证的设备将被认证。我们希望用户从设备A获得经过身份验证的Cognito ID,但事实并非如此 即便如此,也许他们都从设备A转换成了Cognito ID?但情况似乎并非如此。两个设备都有单独的Cognito ID,但使用来自Co

我们正在开发一个iOS应用程序,该应用程序使用未经验证的Cognito访问权限。我们现在添加了一个身份提供者:Cognito用户池

我们看到,当设备A进行登录过程时,从未经身份验证到经过身份验证,Cognito ID保持不变(如预期的那样)。然后,当设备B登录时,未经身份验证的设备将被认证。我们希望用户从设备A获得经过身份验证的Cognito ID,但事实并非如此

即便如此,也许他们都从设备A转换成了Cognito ID?但情况似乎并非如此。两个设备都有单独的Cognito ID,但使用来自Cognito用户池的相同用户帐户。但两者都不共享Cognito ID,这似乎与文档描述的内容背道而驰

有人能确认我们正在做的是一个有效的工作流程吗?也许我们可能做错了什么


我们将Cognito ID存储在后端服务器中,以便将该数据与用户绑定,但是由于Cognito ID发生意外的变化,很难想出一个好的解决方案。

您是正确的,对于经过身份验证的用户,AWS Cognito identityId将是相同的,即使他在两个不同的设备上进行了身份验证

你所描述的不是预期的行为

可能您没有“真正”的身份验证。“真的”是什么意思?这意味着您已经完成了擦除密钥链和获取凭据的过程,因为是凭据提供程序转到标识提供程序并获取登录字典(然后分配适当的标识ID(此时它将与其他设备相同))

通过查看AWS控制台中的联合身份,并查看身份浏览器,可以判断您是否“真正”通过了身份验证。有关身份的“登录”计数不应为0。。。它应该显示(在您的例子中)1,如果您单击标识,您应该看到它已通过池的身份验证

修复?登录并获取会话返回后,必须“获取ID的凭据”(ios sdk中的“凭据”方法)


此链接可能会有所帮助

感谢您的反馈,我们的实施仍然遇到障碍,我们甚至在github上克隆了您的项目示例以进行比较,如果使用interactiveAuthenticationDelegate,成功和失败都会调用didCompletePasswordAuthenticationStepWithError委托方法。对于成功案例,可选参数“error”为nil。。。或者,您可能只是在使用uid和密码执行getSession。不管怎样,您都需要确保凭据提供程序已正确连接到池,并且在使用AWSCognitoCredentialsProvider创建凭据提供程序时已完成此操作。。。将池id和用户池(池)指定为identityProviderManager。这样就可以调用pool.logins。此外,令牌完全由sdk管理。如果您打开了日志,但不必直接使用令牌,那么您应该在AWS RESTful界面的日志中看到它们。好的,因此我怀疑您的用户池没有正确连接到凭据提供程序。因为当您调用调用identityProviderManager的logins函数的“credentials”时,该函数返回一个正确的登录字典(通过AWSTask)。您可以通过调用pool.logins().continuewith…查看词典。。。。查看结果,但如果您没有看到日志中记录的登录,则凭据提供程序没有看到它们。如果您有登录词典,则表示您已登录。但是,只有当credentialsProvider知道itIt时,您才能获得它的凭据。它提到您的cognitoUserPool需要在控制台上配置为身份池的身份验证提供程序。