【问题标题】:iOS AWS Cognito Authentication with Multiple Devices使用多个设备进行 iOS AWS Cognito 身份验证
【发布时间】:2017-04-12 17:17:16
【问题描述】:

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

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

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

有人可以确认我们正在做的工作是有效的工作流程,或者我们可能做错了什么吗?

我们将 Cognito ID 存储在后端服务器中,以便将该数据与用户联系起来,但由于 Cognito ID 发生意外变化,因此很难找到好的解决方案。

【问题讨论】:

    标签: ios amazon-web-services authentication amazon-cognito


    【解决方案1】:

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

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

    您可能没有“真正”通过身份验证。 “真正”经过身份验证是什么意思?这意味着您已经完成了擦除钥匙串和获取凭据的过程,因为它是凭据提供者去身份提供者并获取登录字典(然后分配一个适当的身份ID(那是它变得相同的时候)作为其他设备))。

    您可以通过查看联合身份的 AWS 控制台并查看身份浏览器来判断您是否“真正”通过了身份验证。有问题的身份的“登录”计数不应为 0...它应该显示(在您的情况下)1,如果您单击身份,您应该看到它已通过您的池进行身份验证。

    解决办法?登录回来并获得会话后,您必须“获取 ID 凭据”(在 ios sdk 中是“凭据”方法)。

    此链接可能对cognito notes and diagram有帮助

    【讨论】:

    • 感谢您的反馈,我们的实现仍然遇到障碍,我们甚至将您的项目示例克隆到您的 github 上进行比较,并且实现非常接近。
    • 如果使用 interactiveAuthenticationDelegate 成功和失败都会调用 didCompletePasswordAuthenticationStepWithError 委托方法。对于成功案例,可选参数“error”为零。 ...或者您可能只是在使用 uid 和密码进行 getSession。无论如何,您都需要确保凭证提供程序正确连接到池,并且在使用 AWSCognitoCredentialsProvider 创建凭证提供程序时完成...将 pool_id 和您的用户池(池)指定为 identityProviderManager。这样 pool.logins 就会被调用。
    • 此外,令牌完全由 sdk 管理。如果您打开了日志,您应该在 AWS RESTful 界面的日志记录中看到它们,但您不必直接对令牌执行任何操作。
    • 好的,这让我怀疑您的用户池未正确连接到您的凭据提供程序。因为当您调用调用 identityProviderManager 的 logins 函数并且该函数返回正确的登录字典(通过 AWSTask)的“凭据”时。您可以通过调用 pool.logins().continuewith.... 来查看您的字典并查看结果,但如果您没有看到日志中记录的登录信息,则凭据提供程序没有看到它们。如果您有登录字典,则表示您已登录。但只有在 credentialsProvider 知道时,您才能获得它的凭据
    • 值得一提的是,您的 cognitoUserPool 需要在控制台上配置为身份池的身份验证提供程序。
    猜你喜欢
    • 2018-03-14
    • 2018-12-19
    • 1970-01-01
    • 2023-04-03
    • 2021-04-28
    • 2019-06-19
    • 2019-10-04
    • 1970-01-01
    • 2021-06-23
    相关资源
    最近更新 更多