2

私は現在、Java を使用して記述された Lambda 関数を結び付ける API ゲートウェイをセットアップしています。JavaScript SDK を使用して API Gateway エンドポイントを呼び出していますが、それらは Lambda 関数に正しく中継されています。ただし、次の方法で Cognito ID ID にアクセスしようとすると:

context.getIdentity()

次の応答が返されます。

lambdainternal.api.LambdaCognitoIdentity@xxxxxx

私が走れば

context.getIdentity().getIdentityId()

ロガーに空の文字列を返すだけです。コンテキストにパススルーするリクエストを行っているユーザーの ID ID を取得するために何をする必要があるのか​​ わかりません。

次の方法で Javascript AWS Api クライアントを生成しています。

var apiClient = apigClientFactory.newClient({
                    accessKey: credentials.accessKeyId,
                    secretKey: credentials.secretAccessKey,
                    sessionToken: credentials.sessionToken,
                    region: 'us-east-1'
                });

ラムダ関数は IAM ポリシーを使用して保護されており、ユーザーはラムダ関数にアクセスできるため、認証は正しく機能しています。何らかの理由で IdentityId を提供していないだけです。

4

2 に答える 2

3

Lambda が独自のコンテキスト変数で Cognito ID にアクセスできるようにするには、[統合レスポンス] タブで [呼び出し元の認証情報を使用して呼び出す] チェックボックスを有効にする必要があります。

または、API Gateway のマッピング テンプレートを使用して、 $context.identity.cognitoIdentityIdの値をLambda 関数に渡すこともできます。マッピング テンプレートは次のようになります。

{
  "cognito-identity" : "$context.identity.cognitoIdentityId"
}

詳細/背景情報については、API Gateway のフォーラム ディスカッションの 1 つもご覧ください ( How to pass cognito identity id to backend through API Gateway )。

于 2016-06-09T21:25:51.397 に答える