0
林建設使用服務+客戶端以下的亞馬遜技術:第一次調用AWS_IAM擔保API端點總是擅自
- LAMBDA
- S3
- API網關
- Cognito
- 聯合身份
使用無服務器框架致力於構建和部署API。 客戶端是在S3存儲桶中託管的角度爲1的應用程序。
API端點使用AWS_IAM進行保護,問題是從我的JS客戶端對API的第一次調用是未授權的,之後的每個調用(使用相同的憑據)都將被授權。我可以在我的日誌中看到
var accessKeyId = AWS.config.credentials.accessKeyId;
var secretAccessKey = AWS.config.credentials.secretAccessKey;
var sessionToken = AWS.config.credentials.sessionToken;
未定義我第一次打電話。
我希望實現的是獲取所需的憑據,以便第一次調用成功。
下面的代碼是用來從Amazon Cognito獲取憑據並調用API的。 Im使用AWS API網關生成的JavaScript SDK對請求進行簽名並調用API。
var authenticationDetails = new AWSCognito
.CognitoIdentityServiceProvider
.AuthenticationDetails(authenticationData);
var deferred = $q.defer();
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
var logins = {}
logins["cognito url" + "/" + "cognito pool id"] = result.idToken.jwtToken
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: "identity pool id",
Logins: logins
});
AWS
.config
.credentials
.get(function() {
var accessKeyId = AWS.config.credentials.accessKeyId;
var secretAccessKey = AWS.config.credentials.secretAccessKey;
var sessionToken = AWS.config.credentials.sessionToken;
var config = {
accessKey: accessKeyId,
secretKey: secretAccessKey,
sessionToken: sessionToken
}
var apigClient = apigClientFactory.newClient(config);
apigClient
.endpointName(params, body, additionalParams)
.then(function (result) {
deferred.resolve(true)
})
.catch(function (result) {
deferred.resolve(false)
});
});
},
onFailure: function (err) {
alert(err);
}
});
return deferred.promise;
}
}
我認爲aws.config.cred.get((ERR),該函數第一個參數是錯誤...你應該檢查是否有任何錯誤信息出現。 .. – UXDart