AWS Cognito身份验证凭据IOS Swift 2.3 - 3(集成用户池和标识池)

时间:2016-11-11 07:33:49

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

我一直试图生成这个"身份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代码中没有提到这样的东西。

到目前为止,我得到了#34; AccessToken" &安培; " IdToken"在用户登录应用程序后,在Xcode的日志窗口中。

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

2 个答案:

答案 0 :(得分:1)

您说得对,文档对于身份池和用户池并没有太大帮助,并使它们集成在一起。

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

此外,移动集线器具有下载应用程序的漂亮架构,将Identity Managment与登录管理分开。

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

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天前他们添加了用户池代码)但尚未进行身份合并)。

希望这有帮助

答案 1 :(得分:1)

  • 以下答案假定您正在使用AWS Mobile Hub,下载了awsconfiguration.json文件,并且您正在应用程序中使用该json文件...

这可能还差得很远,但是我已经在自己的应用程序上工作了将近一年,所以我的记忆力很有限-我不记得如何设置MobileHub,如果我搞砸了,一路向上。

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

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