【问题标题】:AWS Cognito Authenticated Credentials IOS Swift 2.3 - 3 (Integrating User Pool & Identity Pool)AWS Cognito Authenticated Credentials IOS Swift 2.3 - 3(集成用户池和身份池)
【发布时间】:2017-03-25 09:39:49
【问题描述】:

我一直在尝试为我的用户池用户生成此“身份 ID”以访问 AWS 资源。但是没有成功。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    // Override point for customization after application launch.

    //user pool configuration
    let serviceConfiguration = AWSServiceConfiguration(
        region: AWSRegionType.USWest2,
        credentialsProvider: nil)

    let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: K.COGNITO_USER_POOL_APP_CLIENT_ID, clientSecret: K.COGNITO_USER_POOL_APP_CLIENT_SECRET, poolId: K.COGNITO_USER_POOL_ID)

    //create a pool
    AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: userPoolConfiguration, forKey: "UserPool")

    self.pool = AWSCognitoIdentityUserPool(forKey: "UserPool")
    self.credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USWest2, identityPoolId: K.IDENTITY_POOL_ID, identityProviderManager: self.pool!)

    let configuration = AWSServiceConfiguration(region: AWSRegionType.USWest2, credentialsProvider: self.credentialsProvider)

    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration

    self.pool!.delegate = self
    self.user = self.pool!.currentUser()

    return true

}

这就是Integrating User pool with Cognito(Swift) Documentation.中给出的全部内容

虽然 Android 代码说在登录映射中传递“idToken”和用户池 url,但 swift 代码中没有提到这样的事情。

到目前为止,在用户登录应用后,我在 Xcode 的日志窗口中得到了“AccessToken”和“IdToken”。

我需要进一步做什么才能获得经过身份验证的身份?如果我做错了,请纠正我。谢谢。

【问题讨论】:

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


    【解决方案1】:

    您是对的,文档对于身份池和用户池以及将它们集成并没有太大帮助。

    我的建议是使用 AWS Mobile Hub,而不是依赖其他文档或示例。如果您使用该站点,它将下载完整的 Swift Xcode 项目,该项目可以正确集成用户池和另一个身份提供者(Google 或 Facebook)。用户池集成是移动中心的一项新功能。

    此外,移动中心具有良好的下载应用架构,将身份管理与登录管理分开。

    但是,如果您想继续使用文档来解决这个问题,那么下面的一组注释应该会有所帮助。加上以下要点。

    1)如果您使用SDK,您不必管理令牌,SDK会为您获取并交换令牌。

    2) 您所要做的就是正确配置您的用户池,正确配置您的 IAM,并调用一小段 SDK 调用(如下所述)。移动集线器的一大优点是一次性为您提供所有功能,让您在学习过程中对其进行修改和发展。

    3) 简短的调用序列是: - 建立一个用户池 - 建立一个身份池 - 使用户池成为您的服务配置的 identityProviderManager (注意:您已完成上述所有操作,因此您只需执行以下步骤) - 执行 Get Identity API 调用(这在您执行“Get Session”SDK 调用时完成。 - 执行 GetCredentialsForIdentity API 调用(这在您执行“凭据”SDK 调用时完成)

    此时,您将拥有凭据并能够根据您的登录(已验证)状态以及 IAM 中的任何相关规则访问 AWS 服务。

    这些注释中有一个(我认为)有用的解释:notes on using cognito and user pools

    在该存储库中还有一个用户池与身份池协同工作的示例,包括注册、忘记密码等,并且包括进行身份合并的能力。

    (Mobile Hub 中的新用户池代码现在可以很好地做到这一点(截至 4 天前,当他们添加用户池代码时),但还没有进行身份合并)。

    希望对你有帮助

    【讨论】:

      【解决方案2】:
      • 以下答案假设您使用的是 AWS Mobile Hub,下载了 awsconfiguration.json 文件,并且您在应用程序中使用了该 json 文件...

      这可能还很遥远,但我已经开发自己的应用程序快一年了,所以我的记忆力有限 - 我不记得我是如何设置 MobileHub 的,也许我搞砸了什么一路向上。

      我能够登录用户,但他们未经身份验证。我无法终生对用户进行身份验证。我继续前进,今晚刚刚解决了这个问题。在此过程中,我意识到我的 awsconfiguration.json 中 CognitoUserPoolId、AppClientId 和 AppClientSecret 的值是错误的。我记得大约一年前我不得不更改 CognitoIdentityPoolId,但我不知道为什么。我还知道我从 AWS Mobile Hub 示例项目中为我的应用程序下载了这个文件。

      无论如何,检查这些值以确保它们都与预期值匹配是值得的。考虑到我能够使用未经身份验证但通常其中 3 个关键值错误的应用程序,这一点很重要。

      【讨论】:

        猜你喜欢
        • 2018-08-31
        • 2017-02-10
        • 1970-01-01
        • 2017-02-28
        • 2016-09-26
        • 2018-05-16
        • 2021-06-08
        • 2018-11-07
        • 2016-10-20
        相关资源
        最近更新 更多