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