2017-03-06 91 views

回答

1

你可以通過建立聯盟用戶池令牌Cognito聯合身份,這會給你的臨時AWS憑據調用AWS lambda表達式。您將需要創建身份池並創建一個具有權限的角色lambda:InvokeFunction

另外請記住,如果您選擇基於身份驗證角色的解決方案,如果要將其限制爲用戶子集,則用戶池的所有用戶都將能夠調用lambda函數,您可以使用用戶池中的組和以聯合身份標識或基於規則的映射來確定角色。

0

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

你需要這三個包:

<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> 

一旦你登錄使用Cognito,你可以調用lambda函數是這樣的:

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調用。我更喜歡將REST API與API網關一起使用,而不是使用來自瀏覽器的直接Lambda函數調用。這是因爲即使您使用Cognito SDK註銷,Lambda函數調用也依賴於TokenID,該TokenID在一個小時內有效。

相關問題