AWS API JavaScript SDK CORS 错误

问题描述

我正在尝试使用 JavaScript SDK 连接到 AWS API。特别是,我需要连接到 MediaLive 服务,但不断收到以下错误:

从源“https://example.com”访问“https://medialive.eu-west-1.amazonaws.com/prod/inputSecurityGroups/123456”的 XMLHttpRequest 已被 CORS 政策阻止:响应预检请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

我在 IAM 角色中启用了 AWSElementalMediaLiveFullAccess 权限,也在服务器上启用了 CORS。但我不知道如何在 MediaLive API 服务上启用 CORS。顺便说一下,API Gateway 没有将 MediaLive 列为它可以连接的服务。

对此的任何帮助将不胜感激!

这是产生上述 CORS 错误的简单测试代码:

    // Initialize the Amazon Cognito credentials provider
    AWS.config.region = 'eu-west-1'; 
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({IdentityPoolId: 'eu-west-1:123456'});
    
    var medialive = new AWS.MediaLive({apiVersion: '2017-10-14'});
    
    var params = {
      InputSecurityGroupId: '123456' /* required */
    };
    medialive.describeInputSecurityGroup(params,function(err,data) {
      if (err) console.log(err,err.stack); // an error occurred
      else     console.log(data);           // successful response
    });

解决方法

AWS MediaLive 目前不支持 CORS。

鉴于使用 Javascript 开发工具包的浏览器对 AWS Elemental MediaLive 服务的调用将是跨域的,并且该服务不支持 CORS,浏览器将不允许发出此请求。一个可能的解决方案是在您的域上创建一个代理,该代理可以将来自浏览器的请求代理到 MediaLive(并在代理中对请求进行签名/身份验证)。这将防止请求看起来像是跨域请求。

另外,值得注意的是,从浏览器使用 Javascript SDK 可能会产生安全风险,因为 API 密钥需要在浏览器中。

谢谢。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...