【问题标题】:x-amzn-ErrorType:UnrecognizedClientException While Calling AWS Api gateway with temporary Credentialsx-amzn-ErrorType:UnrecognizedClientException 在使用临时凭证调用 AWS Api 网关时
【发布时间】:2018-01-22 08:14:01
【问题描述】:

使用 Cognito 用户池成功进行身份验证后,我获得了访问 aws 资源的临时凭据

               var akey='';
               var skey='';
               var st='';

               AWS.config.credentials.get(function (err) {
                       akey = AWS.config.credentials.accessKeyId;
                       skey = AWS.config.credentials.secretAccessKey;
                       st = AWS.config.credentials.sessionToken;
                       var identityId = AWS.config.credentials.identityId;

                        });

使用我调用的那些使用 IAM 授权的 API 的凭据

function ViewMyBookings_With_Credentials() {
debugger;
var apigClient = apigClientFactory.newClient({
     accessKey: akey,
     secretKey: skey,
     sessionToken: st,
     region: 'ap-south-1'
});
var params = {    };
var body = ''; // Get Request
var additionalParams = {      };
apigClient.mybookingsGet(params, body, additionalParams)
    .then(function (result) {
        //This is where you would put a success callback
        alert(result.data);
    }).catch(function (result) {
        debugger;
        alert(result.data);
        //This is where you would put an error callback
    });

}

选项请求成功,我得到了 200 OK 但是对于实际请求显示 CORS 错误,我确信 CORS 没有问题。 显示响应标头

x-amzn-ErrorType:UnrecognizedClientException X-Cache:来自云端的错误

我在 AWS 文档中搜索了此内容,但未收到任何正面回复。

One Question addressing similar issue

但答案不正确/不完整,请让我知道我缺少什么。

【问题讨论】:

  • “正在显示响应标头”...包括 CORS 标头?

标签: javascript amazon-web-services lambda aws-api-gateway amazon-cognito


【解决方案1】:

转到 API Gateway > OPTIONS(用于您的 GET 方法的资源)> 标头映射 >

  • 访问控制允许标头 '内容类型,X-Amz-Date,授权,X-Api-Key,X-Amz-Security-Token,X-XSRF-TOKEN,访问控制允许标头,访问控制允许来源'
  • Access-Control-Allow-Methods 'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'
  • Access-Control-Allow-Origin '*' 如果您需要更多详细信息,请告诉我。

【讨论】:

    【解决方案2】:

    这个问题与javascript代码有关。就我而言,我正在使用 python 并调用安全的 API。成功获得凭据。但是得到确切的指定错误。所以回答我的问题,如果有人遇到同样的错误,这将很有用。

    在通话后我必须使用 auth=authenticaion() 我正在这样做
    authenticaion() 函数返回以下内容

    return AWS4Auth(temp_credentials['AccessKeyId'],
                        temp_credentials['SecretAccessKey'],
                        'us-west-2',
                        'call-api',
                        temp_credentials['SessionToken'])
    

    但是对于AWS4Auth,session-token 是强制参数。我们必须指定它。所以下面的代码解决了我的问题

    return AWS4Auth(temp_credentials['AccessKeyId'],
                        temp_credentials['SecretAccessKey'],
                        'us-west-2',
                        'call-api',
                        session_token=temp_credentials['SessionToken'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-25
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多