首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用axios和aws4认证aws

使用axios和aws4认证aws
EN

Stack Overflow用户
提问于 2020-03-05 21:41:27
回答 2查看 3.3K关注 0票数 2

我正在尝试从WordPress编辑器中的javascript代码向AWS发送请求,通过AWS认证。我在互联网上学过几个例子,但我总是会犯错误。

代码语言:javascript
运行
复制
const CREDS = {
      accessKeyId: "xxx",
      secretAccessKey: "xxx"
      // region: "eu-west-1"
    }; 

  axios(
      aws4.sign(
        {
          host: "polly.eu-west-1.amazonaws.com",
          method: "GET",
          url:
            "https://polly.eu-west-1.amazonaws.com/v1/voices?Engine=neural&IncludeAdditionalLanguageCodes=no&LanguageCode=en-US",
          data: {},
          body: {},
          path:
            "/v1/voices?Engine=neural&IncludeAdditionalLanguageCodes=no&LanguageCode=en-US"
        },
        CREDS
      )
    ).then(res => {
      console.log(res);
      // ...
    });

xhr.js:126拒绝设置不安全的标题"Host“setRequestHeader @ xhr.js:126 forEach @ utils.js:238 dispatchXhrRequest @ xhr.js:120 xhrAdapter @ xhr.js:12 dispatchRequest @ dispatchRequest.js:52 Promise.then (异步)请求@ Axios.js:61 react@ bind.js:9 (匿名)@ edit.js:88 Vh @ react-dom.min.js?ver=16.9.0:163 Uh @ver dom.min.js?ver=16.9.0:14Xh @ver dom.min.js?ver=16.9.0:14 af @ver dom.min.js?ver=16.9.0:14 Yh @ver dom.min.js?ver=16.9.0:164 nd @ver dom.min.js?ver=16.9.0:15 nc @ver dom.min.js?ver=16.9.0:15 Of @dom.min.js?ver=16.9.0:38 Ac @ver dom.min.js?ver=16.9.0:39 unstable_runWithPriority @ react.min.js?ver=16.9.0:26 Ma @react dom.min.js?ver=16.9.0:52 Be @ver dom.min.js?ver=16.9.0:119 react.min.js?ver=16.9.0:26@react react.min.js?ver=16.9.0:26=16.9.0:39 xhr.js:126拒绝设置不安全的标题“内容长度”setRequestHeader @ xhr.js:126 forEach @ utils.js:238 dispatchXhrRequest @ xhr.js:120 xhrAdapter @ xhr.js:12 dispatchRequest @ dispatchRequest.js:52 Promise.then (异步)请求@ Axios.js:61 wrap @ bind.js:9 (匿名)@ edit.js:88 Vh @ver dom.min.js?ver=16.9.0:163 Uh @ver dom.min.js?ver=16.9.0:14 Xh @ver dom.min.js?ver=16.9.0:14 af @wrap dom.min.js?ver=16.9.0:14 Yh @ver dom.min.js?ver=16.9.0:164 nd @ver dom.min.js?ver=16.9.0:15 nc @ver dom.min.js?ver=16.9.0:15 Of @ver dom.min.js?ver=16.9.0:38 Ac @react dom.min.js?ver=16.9.0:39 unstable_runWithPriority @ react.min.js?ver=16.9.0:26 Ma @ver dom.min.js?ver=16.9.0:52 Be @ GET dom.min.js?ver=16.9.0:119 xi @GET dom.min.js?ver=16.9.0:39 xhr.js:178 GET https://polly.eu-west-1.amazonaws.com/v1/voices?Engine=neural&IncludeAdditionalLanguageCodes=no&LanguageCode=en-US 403 (禁止)

有了这个

代码语言:javascript
运行
复制
      aws4.sign(
        {
          service: "polly",
          region: "eu-west-1",
          method: "GET",
          path:
            "/v1/voices?Engine=neural&IncludeAdditionalLanguageCodes=no&LanguageCode=en-US",
          headers: {},
          body: "{}"
        },
        CREDS
      )
    ).then(res => {
      console.log(res);
      // ...
    });

isURLSameOrigin.js:57 Uncaught (在承诺中) TypeError:无法读取未定义的at isURLSameOrigin (isURLSameOrigin.js:57) at dispatchXhrRequest (xhr.js:109)在xhrAdapter (xhr.js:12) at dispatchRequest (dispatchRequest.js:52)的属性“协议”

我不明白为什么这么复杂。为什么我做错了?

EN

回答 2

Stack Overflow用户

发布于 2020-03-16 17:22:13

AWS4让我头疼好几天了!我找到了一个使用放大的解决方案。它创建正确的标头

代码语言:javascript
运行
复制
import {Signer} from '@aws-amplify/core';

let request = {         
        method: 'GET',
        url: 'https://polly.eu-west-1.amazonaws.com/v1/voices?Engine=neural&IncludeAdditionalLanguageCodes=no&LanguageCode=en-US',
        data: '' 
    } 
    let access_info = {
        access_key: xxxxx, 
        secret_key: xxxxxx,
        session_token: xxxxx
    }
    let service_info = {
        service: 'polly',
        region: 'eu-west-1'
    }


    //use amplify sign()function to create the signed headers;
    let signedRequest =  Signer.sign(request,access_info,service_info)

    //remove host from header
    delete signedRequest.headers['host']

    //I normally create an instance if I need to intercept my response or request
    var instance = axios.create();


    let response = await instance(signedRequest).then(function (response) {    
       console.log(response);
       return response

     }).catch(function (error) {

         //... handle errors

     });

我希望这能帮到你

票数 8
EN

Stack Overflow用户

发布于 2022-06-21 20:24:04

吉姆-米拉迪夫,太感谢你了!

我把它变成了一个axios拦截器这里

它可以像这样使用

代码语言:javascript
运行
复制
const interceptor = aws4Interceptor(
  {
    region: "eu-west-2",
    service: "execute-api",
  },
  {
    accessKeyId: "",
    secretAccessKey: "",
  }
);

包的启发,我以前(错误地)在浏览器中使用了这个包。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60554364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档