带有iOS的Amazon Cognito:禁止访问身份

时间:2016-04-05 19:47:56

标签: ios swift amazon-cognito

提前感谢您的帮助!

我无法让Amazon Cognito正确存储/同步数据。

在dataset.synchronize()行(不存储Cognito中的数据)中,我收到一个大的输出错误(ID为star star out),例如:

AWSCredentialsProvider.m line:429 | __73-[AWSCognitoCredentialsProvider 
getCredentialsWithCognito:authenticated:]_block_invoke |   GetCredentialsForIdentity
failed. Error is [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain 
Code=10 "(null)" UserInfo={__type=NotAuthorizedException, message=Access to
Identity '*****' is forbidden.}]

cognitoID不是nil,并且正确返回(并且匹配我可以在线阅读的值)

例如,在使用Facebook进行身份验证后,我执行以下操作:

  if (FBSDKAccessToken.currentAccessToken() != nil)
    {
        let fbCognitoToken = FBSDKAccessToken.currentAccessToken().tokenString
        credentialsProvider.logins = [AWSCognitoLoginProviderKey.Facebook.rawValue: fbCognitoToken]
        // Retrieve your Amazon Cognito ID
        credentialsProvider.getIdentityId().continueWithBlock { (task: AWSTask!) -> AnyObject! in
            if (task.error != nil) {
                print("Error: " + task.error!.localizedDescription)
            }
            else {
                // the task result will contain the identity id
                let cognitoId = task.result

                //checking if cognito was successful, if true, sets success condition to true to prepare for segue into app
                if cognitoId != nil{
                    print (cognitoId)
                    cognitoSuccess = true

                    let syncClient = AWSCognito.defaultCognito()

                    let dataset = syncClient.openOrCreateDataset("User_Data")
                    dataset.setString("test@test.com", forKey:"Email")
                //    credentialsProvider.refresh()
                    dataset.synchronize()
                    } }return nil}}

我可以正确地从Facebook读取数据,并且所有身份验证都可以从我所知道的内容中正确进行。我怀疑这里有一些简单的东西,但是花了好几天后,我无法理解!使用AWS门户中的IAM检查器返回Cognito函数的所有“绿色检查”,因此我确信这不是服务器端的权限问题。

再次感谢您提供的任何见解!

编辑: 在上面的代码块之前,我打电话给:

let credentialsProvider = self.initializeCognito()

运行(标识池标识出来):

 func initializeCognito () -> AWSCognitoCredentialsProvider
{
    let credentialsProvider = AWSCognitoCredentialsProvider(
        regionType: AWSRegionType.USEast1, identityPoolId: "******")

    let defaultServiceConfiguration = AWSServiceConfiguration(
        region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider)

    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = defaultServiceConfiguration

    return credentialsProvider     
}

2 个答案:

答案 0 :(得分:0)

当您尝试获取经过身份验证的ID的凭据而不提供与其链接的任何提供者令牌时,可能会抛出该异常。 Cognito要求至少提供一个。

在GetCredentialsForIdentity调用失败期间,您是否可以检查是否包含了facebook令牌?如果没有,我猜这是你的问题。

编辑:

由于您使用的是AWSCognito.defaultCognito(),因此请按照this docs page上的示例操作,以确保同步客户端使用正确的凭据提供程序:

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

AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration

答案 1 :(得分:0)

结束找出答案 - 当我第一次设置AWS并遵循亚马逊的一些指南时,我已经放置了代码来在应用程序的App Delegate中创建一个新的credentialsProvider。我忘了它,然后在稍后尝试初始化另一个credentialsProvider。这种混淆造成了问题,并且删除App Delegate中的初始化修复了身份验证问题。