【问题标题】:Validate AWS Cognito Token with Swift使用 Swift 验证 AWS Cognito 令牌
【发布时间】:2017-02-25 08:16:21
【问题描述】:

我已基本完成开发人员使用 AWS 进行身份验证登录的流程。我似乎无法对收到的后端令牌进行身份验证,并且似乎找不到任何通过第三方后端执行开发人员身份验证的 current 实现。下面列出了我得到的错误。

截至目前,我的代码如下所示:

包含自定义身份提供者的类:

import Foundation
import AWSCognitoIdentityProvider

class CustomIdentityProvider: NSObject, AWSIdentityProviderManager {
var tokens: [NSString: NSString]?

init(tokens: [NSString: NSString]) {
    self.tokens = tokens
}

@objc func logins() -> AWSTask<NSDictionary> {
    return AWSTask(result: tokens! as NSDictionary)
}
}

AWS-APIManager.swift {sn-p}

/* obtained cognito token from my back-end via getOpenIdTokenForDeveloperIdentity*/

/* From here I my app receives an IdentityId and Token */

 let client_cognito_id = String(describing: valid_response)

 let session_token     = json.dictionaryValue["Token"]!


 let login_with_amazon = NSString(string: "cognito-identity.amazonaws.com")

 let token             = NSString(string: String(describing: session_token))



 let customProviderManager = CustomIdentityProvider(tokens:  [login_with_amazon: token])

 let credentialsProvider = AWSCognitoCredentialsProvider(
                        regionType: self.AWS_REGION,
                        identityPoolId: "us-east-1:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
                        identityProviderManager: customProviderManager
                    )


                        credentialsProvider.setIdentityProviderManagerOnce(customProviderManager)
                        credentialsProvider.getIdentityId().continue ({ (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
                                print(cognitoId)
                                print("SUCCESS!!!")
                            }
                            return nil
                        })

                }

由于某些奇怪的原因,我无法验证收到的令牌。我收到错误“登录令牌无效。无法传入 Cognito 令牌。”。我试图按照文档并将工作代码拼凑在一起,我已经找到了数百个来源,并且似乎无法超越身份验证过程的这一部分。任何帮助将不胜感激。谢谢!

【问题讨论】:

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


    【解决方案1】:

    我认为这里的问题是,尽管您提供了令牌,但您并没有设置从后端获取的身份 ID。因此,它使用 Cognito OpenIdConnectToken 调用 GetId,这是不受支持的。

    Developer Authenticated Identities 最简单的客户端实现是扩展AWSCognitoCredentialsProviderHelper

    很抱歉在 Objective C 而不是 Swift 中提供这个。在您的实现中,只需覆盖令牌方法。

    - (AWSTask<NSString *> *)token {
        //get the identity id and token from your server
        //You can use AWSTaskCompletionSource if you don't have it and need to get it asynchronously.
        //Once you have this information, simply set the identity id and return the token
        self.identityId = identityId;
        return [AWSTask taskWithResult:token];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 2016-04-11
      相关资源
      最近更新 更多