我正在尝试访问这个 AWS 端点:
https://abcde12345hf.execute-api.us-east-2.amazonaws.com/dev/users
返回:
[{
"id": 1,
"name": "Mike"
},{
"id": 2,
"name": "Brian"
}]
- 在我的 Angular 代码中,我使用 AWS4库发送 secretAccessKey、accessKeyId 和 sessionToken 来验证用户,但我收到以下错误:
core.js:12501 ERROR Error: Uncaught (in promise): Error: Request failed with status code 403 Error: Request failed with status code 403
- 有谁知道如何将 AWS4 与 Angular 一起正确使用,以便我可以进行这个简单的 GET 调用?或者有人知道使用这些 key 和 token 进行身份验证的另一种调用方式吗?非常感谢!
这就是我获取 key 和 token 的方式(这部分效果很好)
AWS.config.region = 'us-east-2';
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-2:ehkjthf-sf23-12ds-xxxxxxxxx',
Logins: {
'cognito-idp.us-east-2.amazonaws.com/us-east-2_Raxxxx': this.id_token
}
});
console.log(AWS.config.credentials);
现在,这就是我使用这些 key 和 token 进行 GET 调用的方式。
(AWS.config.credentials as AWS.Credentials).get(function(error: AWSError){
if(error){
console.log('Error ', error);
}else{
let request = {
host: 'https://abcde12345hf.execute-api.us-east-2.amazonaws.com/dev/users',
method: 'GET',
url: 'https://abcde12345hf.execute-api.us-east-2.amazonaws.com/dev/users',
path: '/users',
headers: {
"Content-Type":"application/json"
},
}
let signedRequest = aws4.sign(request,
{
secretAccessKey: AWS.config.credentials.secretAccessKey,
accessKeyId: AWS.config.credentials.accessKeyId,
sessionToken: AWS.config.credentials.sessionToken
});
delete signedRequest.headers['Host']
delete signedRequest.headers['Content-Length']
axios(signedRequest).then((response) =>{
console.log(response); // Output the Array Object here
});
}
});
最佳答案
我让它工作了,我会分享我的解决方案,以防其他人需要它!
我最终使用了 Angular 而不是 axios 的 http 服务。这是我的解决方案;
(AWS.config.credentials as AWS.Credentials).get((error: AWSError) =>{
if(error){
console.log('Error ', error);
}else{
let request = {
host: 'abcdefg.execute-api.us-east-2.amazonaws.com',
method: 'GET',
url: `https://abcdefg.execute-api.us-east-2.amazonaws.com/dev/users`,
path: '/dev/users'
}
let signedRequest = aws4.sign(request, {
secretAccessKey: AWS.config.credentials.secretAccessKey,
accessKeyId: AWS.config.credentials.accessKeyId,
sessionToken: AWS.config.credentials.sessionToken
});
delete signedRequest.headers['Host'];
this.http.get(signedRequest.url, signedRequest).subscribe(res => this.myObject = res);
}
}
关于angular - 如何使用 Angular 向 API 网关发出 Get 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55188334/