2016-08-07 5 views
-2

私のiosアプリケーションで他のAWSツールに直接アクセスできるように、次のコードを使用してください。AWS Cognito Identityを使用するポイント

AWSCognitoCredentialsProvider *credentialsProvider = [[DeveloperAuthenticationProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"poolId"]; 

    AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider]; 

    AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration; 

    __block NSString *cognitoId = nil; 

    // Retrieve your Amazon Cognito ID 
    [[credentialsProvider getIdentityId] continueWithBlock:^id(AWSTask *task) 
    { 
     if (task.error) 
     { 
      NSLog(@"Error: %@", task.error); 
     } 
     else 
     { 
      // the task result will contain the identity id 
      cognitoId = task.result; 
     } 

     return nil; 
    }]; 

次に、AWS LambdaをAPIゲートウェイとともに使用して、ユーザーIDを取得します。

答えて

0

Cognitoは、AWSリソースにアクセスするときに実行コンテキスト(認証)を提供するために必要です。その意味は、AWS上で本当に匿名のものは何もないということです。ユーザーに「ログイン」していなくても、デバイスに関連付けられた一意の識別子がまだあります。

これは、あなたのアプリの外にいる人があなたのAWSリソース(S3、Lambdaなど)にヒットしてコードを実行できないということです。

これは、Cognitoグループの実行を許可するために、実行許可をラムダに割り当てることができ、また、実行する必要があることを意味します。

注記:iOSでLambdasを実行するためにAPIゲートウェイを使用する必要はありません。ネイティブで呼び出すことができます。私はこれを行うよりも、構成を少なくする方が好きです。あなたの質問に答える

http://docs.aws.amazon.com/mobile/sdkforios/developerguide/lambda.html

希望。

+0

私がこれをコメントアウトしても、私のゲートウェイ機能はまだ機能しています。したがって、s3のようなゲートウェイの外にあるものに直接アクセスしようとすると、失敗するでしょう。右?また、ラムダにアクセスするためにゲートウェイを使用するので、私はhttps://を送ることができます。ありがとう。 – cdub

+0

Cognitoなしでゲートウェイにアクセスできる場合は、世界中の誰もがアクセスできます。あなたは機能が広く開いています。これを使用して、S3からWebにアセットを配信するRESTエンドポイントを提供している可能性があります。それは理にかなっている。 また、iOSのネイティブAWS API呼び出しはすべて、AWS REST APIへのhttps呼び出しに変換されることに注意してください。 –

+0

私はネイティブのhttps:呼び出しを認識しませんでした。 CognitoIdを使用して自分のユーザーだけにAPIを作成するにはどうすればよいですか?ありがとう、 – cdub

関連する問題