2017-03-06 7 views
0

Javascript APIを使用してラムダ関数を呼び出す必要があります。CognitoのユーザープールIDを使用してラムダ関数を呼び出すことは可能ですか?

ブラウザで認証されたユーザーのCognitoユーザープールの資格情報で呼び出す必要があります。

目的は、ラムダ関数が、cognitoユーザープールからのユーザーと同じレベルのS3へのアクセスを持つことです。

どうすればいいですか?

おかげ

答えて

1

あなたがCognito連携アイデンティティを持つユーザー・プール・トークンをフェデレーションことで、これはあなたのAWSラムダ関数を呼び出すための一時的なAWSの資格を与えることを行うことができます。アイデンティティプールを作成し、アクセス許可lambda:InvokeFunctionを持つロールを作成する必要があります。

また、ユーザープールのすべてのユーザーは、認証役割ベースの解決方法を選択するとラムダ機能を呼び出すことができます。ユーザーのサブセットに制限する場合はユーザープール内のグループを使用できます。トークンまたはルールに基づくマッピングをフェデレーションされたアイデンティティに組み込んで役割を決定します。

0

参考:あなたはCognitoを使用してログインすると、あなたはこのようにラムダ関数を呼び出すことができ

<script src="js/aws-cognito-sdk.min.js"></script> 
<script src="js/amazon-cognito-identity.min.js"></script> 
<script src="js/aws-sdk.min.js"></script> 

http://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-user-identity-pools-javascript-examples.html

あなたはこれらの3つのパッケージが必要になります

function invokeMyLambda() 
{ 
    if(!objCognitoUser) syncAwsFromCognito(); 
    var lambda = new AWS.Lambda({region: 'us-east-1', apiVersion: '2015-03-31'}); 
    // create JSON object for service call parameters 
    var pullParams = { 
     FunctionName : 'myLambFunctionName', 
     InvocationType : 'RequestResponse', // Event | RequestResponse | DryRun 
     LogType : 'None', 
     Payload : JSON.stringify({ "yourKeyName": "Key Value to pass to the function in Event Object"}), 
    }; 
    // invoke Lambda function, passing JSON object 
    lambda.invoke(pullParams, function(err, data) { 
     if (err) { 
      console.log(err); 
     } else { 
      console.log(data); 
      alert("Success: " + JSON.stringify(data)); 
     } 
    }); 
    lambda = null; 
} 

function syncAwsFromCognito() { 
    // objCognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData); 

    if(!objCognitoUser) { 
     objCognitoUser = objUserPool.getCurrentUser(); 
    } 
    if (objCognitoUser) { 
     objCognitoUser.getSession(function(err, result) { 
     if (result) { 
      if(AWS.config.credentials == null) // Refresh AWS Config credentials 
       AWS.config.credentials = new AWS.CognitoIdentityCredentials(jsonUserCreds); 
       AWS.config.credentials.params.Logins[strConfUserPoolID] = result.idToken.jwtToken; 
      } 
     }); 

     //call refresh method in order to authenticate user and get new temp credentials 
     AWS.config.credentials.refresh(function (error) { 
      if (error) { 
       console.log('syncAwsFromCognito', error); 
      } 
     }); 
    } 
    else 
     alert("Session expired. Login again"); 
} 

あなたはS3を作ることができますCognito認証後にJavascriptから直接呼び出してください。私は、ブラウザから直接ラムダ関数呼び出しの代わりにAPIゲートウェイでREST APIを使用することを好むでしょう。 Lambda関数呼び出しは、Cognito SDKを使用してログアウトしても1時間有効なTokenIDに依存しているためです。

関連する問題