angular - 如何使用 Angular 向 API 网关发出 Get 请求?

标签 angular amazon-web-services aws-api-gateway

我正在尝试访问这个 AWS 端点:

https://abcde12345hf.execute-api.us-east-2.amazonaws.com/dev/users

返回:

[{
  "id": 1,
  "name": "Mike"
},{
  "id": 2,
  "name": "Brian"
}]
  • 在我的 Angular 代码中,我使用 AWS4库发送 secretAccessKeyaccessKeyIdsessionToken 来验证用户,但我收到以下错误:

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/

相关文章:

json - 将 JSON 发送到 Web 服务时如何忽略 TypeScript 中的实体字段?

asp.net - Angular 2保存Excel文件

angular - 如何在 rxjs 中停止/启动订阅?

angular - 设置 Azure B2C 的正确方法?

python - 在用于 python mssql 连接的 aws lambda 中未找到 pyodbc 模块

ios - API 网关 : Empty request body?

amazon-web-services - 如何使用 yaml 格式文件在 serverless.yml 中编写嵌套 IF,同时使用它进行云形成?

amazon-web-services - 如何在 DynamoDB 中添加列

android - 基于用户组的 AWS API Gateway 自定义授权方

aws-lambda - API 网关 + Lambda - CORS 问题