我正在遵循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时,请求通过了,我收到了正确的数据,这表明问题出在我的请求函数中,而不是我的值。
任何帮助都是感激不尽的!
1条答案
按热度按时间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, }, } );
的所有邮件头