我想使用JavaScript API調用Lambda函數。是否可以使用cognito用戶池身份調用Lambda函數?
我希望使用在瀏覽器上進行身份驗證的用戶的cognito用戶池憑據來調用它。
目標是Lambda函數將具有與來自cognito用戶池的用戶相同級別的S3訪問權限。
我該怎麼做?
感謝
我想使用JavaScript API調用Lambda函數。是否可以使用cognito用戶池身份調用Lambda函數?
我希望使用在瀏覽器上進行身份驗證的用戶的cognito用戶池憑據來調用它。
目標是Lambda函數將具有與來自cognito用戶池的用戶相同級別的S3訪問權限。
我該怎麼做?
感謝
你可以通過建立聯盟用戶池令牌Cognito聯合身份,這會給你的臨時AWS憑據調用AWS lambda表達式。您將需要創建身份池並創建一個具有權限的角色lambda:InvokeFunction。
另外請記住,如果您選擇基於身份驗證角色的解決方案,如果要將其限制爲用戶子集,則用戶池的所有用戶都將能夠調用lambda函數,您可以使用用戶池中的組和以聯合身份標識或基於規則的映射來確定角色。
你需要這三個包:
<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在一個小時內有效。