2017-01-05 2 views
0

AWS APIゲートウェイで構築された複数のメソッドを呼び出すSwiftプロジェクトに取り組んでいます。これらのメソッドにはIAM Authorizationが必要です。AWS Signature V4を使用してPostman RESTクライアントでこのメソッドをテストしましたが、ドキュメントやその他のものが不足しているかどうかはわかりませんが、適用方法を理解できませんSwiftプロジェクトのAWS署名。Swift 3のIAM認可を使用したAPIゲートウェイメソッドの呼び出し

私は、クライアントがシングルトンであるため、デリゲートにまたはコールする前にこのコードを追加することです(それは同様SDKでAWSの船は、クライアントクラスにコメントしている)が見つかり最も関連トピック:

let credentialProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "YourIdentityPoolId") 
let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialProvider) 
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration 

私はこのコードがCognitoを使ってサインインしていると確信していますが、プロジェクトにCognitoを追加したくない場合は、自分のデータベースにAWS以外のユーザープールがあります。

注:APIメソッドでIAM Authorizationを無効にすると、Swift呼び出しがうまく機能します。

コール:

let client = PRUEBAPruebaClient.defaultClient() 
client.petstorewalkthroughFlattenallGet().continueWithBlock({(task: AWSTask) -> AnyObject? in 
     self.showResult(task) 
     return nil 
    }) 
func showResult(task: AWSTask) { 
    if let error = task.error { 
     print("Error: \(error)") 
    } else if let result = task.result { 
     print(result) 
    } 
} 

応答:

Error: Error Domain=com.amazonaws.AWSAPIGatewayErrorDomain Code=1 "(null)" UserInfo={HTTPBody={ 
    message = "Missing Authentication Token"; 
}, HTTPHeaderFields=<CFBasicHash 0x17407f600 [0x1a81b4bb8]>{type = immutable dict, count = 9, 
entries => 
    0 : X-Cache = <CFString 0x170054ee0 [0x1a81b4bb8]>{contents = "Error from cloudfront"} 
    1 : Content-Type = <CFString 0x170054c70 [0x1a81b4bb8]>{contents = "application/json"} 
    2 : x-amzn-ErrorType = <CFString 0x17007b0c0 [0x1a81b4bb8]>{contents = "MissingAuthenticationTokenException"} 
    3 : x-amzn-RequestId = <CFString 0x17007b300 [0x1a81b4bb8]>{contents = "3c410741-d38e-11e6-9d84-09cbdcab48a7"} 
    4 : Via = <CFString 0x1700bd040 [0x1a81b4bb8]>{contents = "1.1 9d0536684daddf203ff3b546b85c5dfe.cloudfront.net (CloudFront)"} 
    6 : Date = <CFString 0x170054b50 [0x1a81b4bb8]>{contents = "Thu, 05 Jan 2017 21:30:53 GMT"} 
    10 : Content-Length = 43 
    11 : X-Amz-Cf-Id = <CFString 0x1700996e0 [0x1a81b4bb8]>{contents = "dEYo5M0iFCthvydhiViK2L-DlzwoeX0mSHQ1YTBAtQZL0m_w_jdc2g=="} 
    12 : Connection = <CFString 0x170037760 [0x1a81b4bb8]>{contents = "keep-alive"} 
} 
} 

はあなたの助けをありがとう!

Postman call

Postman response

答えて

0

独自のカスタムデータベースを使用してAPIゲートウェイAPIの認証を実装したい場合は、2つのオプションがあります。

  1. developer authenticated IDsとAWS_IAM許可を。ここでSwift code sample
  2. custom authorizer次のとおりです。

    カスタム要求承認者により、開発者は、AWSラムダ関数を使用して、このようなOAuthのようベアラートークン認証戦略を使用して、彼らのAPIを許可することができます。 ...ラムダを使用して、さまざまな認可戦略(JWT検証、OAuthプロバイダコールアウトなど)を実装できます。

カスタム承認者を使用することを選択した場合は、SigV4とあなたの要求に署名する必要がありませんが、あなたはまだ、要求ヘッダー内のベアラトークンのいくつかの並べ替えに合格する必要があります。このルートを選択すると、クライアント側Swiftコードが簡素化されます。

関連する問題