简体   繁体   English

Axios 无法获取访问令牌?

[英]Axios is not working to get access token?

i have axios call to get the bearer token it is oauth2.0 but for some reason it is failing same call is working in postman.我有 axios 调用来获取不记名令牌,它是 oauth2.0 但由于某种原因它失败了相同的调用在 postman 中工作。

index.js index.js

export async function getESLAccessToken(apiConfig: any) {
    const _body = {
        grant_type: apiConfig.authOptions.body.grant_type,
        client_id: apiConfig.authOptions.credentials.sdk_voyage.clientId,
        client_secret: apiConfig.authOptions.credentials.sdk_voyage.clientSecret,
        scope: apiConfig.authOptions.body.scope
    };
    const _headers = {
        "Content-Type": "application/x-www-form-urlencoded",
        "appName": "Blink",
        "Accept": "*/*",
        "Content-Length": 163
    };
    const request = {
        method: 'POST',
         _body,
        headers: _headers
    };

    try {
        const resp = await axios.post('https://auth/oauth2/token',
        request);
        console.log(resp.data);
    } catch (err) {
        // Handle Error Here
        throw err;
    }
}

This is how request building for axios这就是为 axios 构建请求的方式

{
  "method": "POST",
  "_body": {
    "grant_type": "client_credentials",
    "client_id": "abc",
    "client_secret": "xyz",
    "scope": "APPPII APPPHI"
  },
  "headers": {
    "Content-Type": "application/x-www-form-urlencoded",
    "appName": "Blink",
    "Accept": "*/*",
    "Content-Length": 163
  }
}

Error错误

Error: Request failed with status code 400

Postman working request and response Postman 工作请求和响应

POST https://auth/oauth2/token
200
163 ms
POST /auth/oauth2/token HTTP/1.1

Headers
User-Agent: PostmanRuntime/7.26.8
Accept: */*
Cache-Control: no-cache
Postman-Token: d90ccc33-1d77-4502-9a41-74080dd3d7a5
Host: qaapih8.corp.cvscaremark.com
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 163
Request Body
grant_type=client_credentials&client_id=abc&client_secret=xyz&scope=APPPII%20APPPHI
HTTP/1.1 200 OK

Response Body响应体

{ "token_type":"Bearer", "access_token":"token returned", "expires_in":3600, "consented_on":164684, "scope":"APPPII APPPHI" }

The second argument of the axios.post function should be the request body. axios.post function 的第二个参数应该是请求正文。 And the third argument should be the Axios request config object (Which you can set your headers).第三个参数应该是 Axios 请求配置 object (您可以设置标题)。 Axios POST Requests Axios POST 请求

In your case, the code should be like:在您的情况下,代码应如下所示:

const body = {
  grant_type: apiConfig.authOptions.body.grant_type,
  client_id: apiConfig.authOptions.credentials.sdk_voyage.clientId,
  client_secret: apiConfig.authOptions.credentials.sdk_voyage.clientSecret,
  scope: apiConfig.authOptions.body.scope
};

const myHeaders = {
  // add your headers here
}

const response = await axios.post(
  'https://auth/oauth2/token',
  body,
  { headers: myHeaders }
);

Replace代替

const request = {
    method: 'POST',
     _body,
    headers: _headers
};

with:和:

const request = {
    method: 'POST',
    data: _body,
    headers: _headers
};

As pointed out by the docs in the comments session: https://axios-http.com/docs/req_config正如评论中的文档所指出的那样 session: https://axios-http.com/docs/req_config

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM