【问题标题】:Amazon Cognito with iOS: Access to Identity Forbidden带有 iOS 的 Amazon Cognito:禁止访问身份
【发布时间】:2016-04-14 12:24:23
【问题描述】:

提前感谢您的帮助!

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

在 dataset.synchronize() 行(不将数据存储在 Cognito 中)上,我收到一个大的输出错误(ID 已加星标),例如:

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()

哪个运行(身份池 ID 已加星标):

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

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

    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = defaultServiceConfiguration

    return credentialsProvider     
}

【问题讨论】:

    标签: ios swift amazon-cognito


    【解决方案1】:

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

    您能否在 GetCredentialsForIdentity 调用失败时检查您是否包含了 facebook 令牌?如果不是,我猜那是你的问题。

    编辑:

    由于您使用的是 AWSCognito.defaultCognito(),因此遵循 this docs page 上的示例以确保同步客户端使用正确的凭证提供程序可能会有所帮助:

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

    【讨论】:

    • 感谢您的回复!在如上所示的第 4 行代码中,我确实将 Facebook 令牌传递给了 cognito 凭据提供程序——这还不够吗?如果我可以问,我应该写什么?谢谢!
    • 这取决于一点。尝试登录后是否立即失败?还是您要关闭应用程序并稍等片刻?如果是前者,您是否使用此凭据提供程序初始化同步客户端?
    • 登录Facebook(成功)后,立即调用此代码。 cognitoID 返回“正确”,即当我打印它 (cognitoID) 以确保我没有得到 nil 或无意义的东西时,正确打印了一个唯一标识符(等于我可以找到 AWS Cognito Identity Browser 的那个)。我已经注释掉了 credentialsProvider.refresh() 行,但是把它放进去只会返回另一个错误,类似于已经为 .synchronise() 行提供的错误。所以简而言之,不,没有关闭/重新打开!
    • 抱歉,我不是 iOS 专家,我的第二个问题还不清楚。你可以试试我的编辑,看看会发生什么?
    • 非常感谢你试一试——我试图把这个语句放在 syncClient = AWSCognito.defaultCognito() 之前,但这并没有帮助——我几乎已经有了那个代码!请参阅对我最初问题的修改:我意识到我应该在第一次询问时提供更多信息——我很抱歉。
    【解决方案2】:

    最终找到了答案——当我第一次设置 AWS 并遵循一些 Amazon 的指南时,我已经在应用程序的 App Delegate 中放置了代码来创建一个新的 credentialsProvider。我忘了它,然后尝试初始化另一个凭据提供程序。这种混乱造成了问题,删除 App Delegate 中的初始化修复了身份验证问题。

    【讨论】:

      猜你喜欢
      • 2015-01-25
      • 1970-01-01
      • 2021-03-05
      • 2014-09-26
      • 1970-01-01
      • 2017-06-08
      • 2016-05-26
      • 2017-02-27
      • 2017-05-31
      相关资源
      最近更新 更多