繁体   English   中英

Axios 无法获取访问令牌?

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

我有 axios 调用来获取不记名令牌,它是 oauth2.0 但由于某种原因它失败了相同的调用在 postman 中工作。

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;
    }
}

这就是为 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: Request failed with status code 400

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

响应体

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

axios.post function 的第二个参数应该是请求正文。 第三个参数应该是 Axios 请求配置 object (您可以设置标题)。 Axios POST 请求

在您的情况下,代码应如下所示:

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 }
);

代替

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

和:

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

正如评论中的文档所指出的那样 session: https://axios-http.com/docs/req_config

暂无
暂无

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

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