2016-10-16 18 views
0

AWSを使用して開発者認証サインインのプロセスをほぼ完了しました。私が受け取ったバックエンドトークンを認証できないようで、の現在のの実装では、サードパーティのバックエンド経由で開発者認証を行っているようです。私が得るエラーは以下の通りです。SwiftでAWS Cognitoトークンを検証する

私のコードは次のようになり、今の時点で:いくつかの奇妙な理由で

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 {スニペット}

/* 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 
         }) 

       } 

:カスタムIDプロバイダを含む

クラス私が受け取ったトークンを認証できないという奇妙な理由があります。 「ログイントークンが無効です.Cognitoトークンを渡すことができません。」。私はドキュメントに従って、実際に何百ものソースが見つかりましたが、認証プロセスのこの部分を過ぎ去っていくことができないと思われる作業コードをまとめようとしました。どんな助けでも大歓迎です。ありがとう!

答えて

0

私はここでの問題は、あなたがトークンを供給しているが、あなたがあなたのバックエンドから取得しているアイデンティティのIDを設定していないことであると信じています。したがって、サポートされていないCognito OpenIdConnectTokenを使用してGetIdを呼び出しています。

開発者認証アイデンティティの最も単純なクライアントの実装では、Objective Cの代わりに、スウィフトでこれを提供するためのAWSCognitoCredentialsProviderHelper

謝罪を拡張することです。実装では、トークンメソッドをオーバーライドするだけです。

- (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]; 
} 
関連する問題