通过node.js服务器上的http请求获取LinkedIn访问令牌

y4ekin9u  于 2022-11-03  发布在  Node.js
关注(0)|答案(1)|浏览(175)

我正在遵循Authorization Code Flow (3-legged OAuth)文档,现在我在第3步,我需要使用授权码来从LinkedIn接收访问令牌。在项目中,我使用node.js、typescript和node-fetch库。下面的函数创建了一个内容类型为x-www--form-urlencoded的主体,因为这是LinkedIn需要的内容类型。

async function GetAccessToken(data: any) {

    let body: string | Array<string> = new Array<string>();
    for (let property in data) {
        let encodedKey = encodeURIComponent(property);
        let encodedValue = encodeURIComponent(data[property]);
        body.push(encodedKey + "=" + encodedValue);
    }
    body = body.join("&");

    const response = await fetch("https://www.linkedin.com/oauth/v2/accessToken", {
        method: 'POST',
        headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
        body: body
    }).then((res: any) => {
        console.log("Result", res);
    });
    return response;
}

我没有收到任何错误,响应状态为200,但收到的响应值为:

size: 0,
timeout: 0,

LinkedIn承诺是:

access_token
expires_in

当我使用postman发布带有我的参数的url时,请求通过了,我收到了正确的数据,这表明问题出在我的请求函数中,而不是我的值。
任何帮助都是感激不尽的!

lyr7nygr

lyr7nygr1#

您需要添加来自postman const accessToken = await fetch( "https://www.linkedin.com/oauth/v2/accessToken", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", client_id: env.LINKEDIN_CLIENT_ID, client_secret: env.LINKEDIN_CLIENT_SECRET, grant_type: "authorization_code", redirect_uri: "http://localhost:3000/api/auth/linkedin-custom", code: code, }, } );的所有邮件头

相关问题