AWS API JavaScript SDK CORS 错误

Posted

技术标签:

【中文标题】AWS API JavaScript SDK CORS 错误【英文标题】:AWS API JavaScript SDK CORS errors 【发布时间】:2021-08-06 00:50:39 【问题描述】:

我正在尝试使用 javascript 开发工具包连接到 AWS API。特别是,我需要连接到 MediaLive 服务,但不断收到以下错误:

CORS 政策已阻止从源“https://example.com”访问“https://medialive.eu-west-1.amazonaws.com/prod/inputSecurityGroups/123456”上的 XMLHttpRequest:响应预检请求未通过访问控制检查:请求的资源上不存在“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
    );

【问题讨论】:

【参考方案1】:

AWS MediaLive 目前不支持 CORS。

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

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

谢谢。

【讨论】:

谢谢你!但是,AWS JavaScript SDK 确实支持 MediaLive API 通信。那么您能否帮助我了解如何从浏览器发出 MediaLive 命令并回避这个 CORS 问题?谢谢! 嗨 Mohammed,请问您是否有任何进一步的建议? MediaLive 在 JavaScript SDK 中确实有一个 API 库:那么如何从浏览器与它进行通信,而不会遇到这些 CORS 问题?谢谢!

以上是关于AWS API JavaScript SDK CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章

AWS API网关SDK,与Android的问题

AWS SDK JavaScript:如何显示 AWS.S3.putObject 的上传进度?

使用 aws sdk javascript 禁用 dynamodb 流

如何在 lambda 函数中包含 javascript aws-sdk?

Javascript || AWS S3 SDK &croppie 文件上传错误

保护 AWS JS SDK Api 调用