无法使用axios获取linkedin的访问令牌



我正在尝试按照Linkedin Oauth中描述的步骤获取访问令牌。我正在尝试执行获取访问令牌的过程中的步骤2。我正在使用Axios进行POST请求。以下是我正在使用的代码(出于安全原因,客户端机密和id不是真实的(:

const axios = require('axios');
const qs = require('qs');
axios({
method: 'post',
url: 'https://www.linkedin.com/oauth/v2/accessToken',   
data: qs.stringify({
grant_type: 'authorization_code',
code: 'AQSow7V6s2F2koWzIsnVKcQGt_cHtsM1F3FHZOrEV0UY1KIFkWiFJpi8dt1NtjuZMOO6-NStoCjTf58awk6GBcH2XQRctt7IBtel4Oeop5yVIBqiedk8qxlIlbkMxlfGg1gCVoupXL6xUc3-jegKYDPSe0rl4mygdpIzGdej2_hhJ827vJcojtvaMXCCGw',
redirect_uri: 'https%3A%2F%2Fwww.linkedin.com%2Fcompany%2Ftttrrr878',
client_id: '99blt2z20qlm3d',
client_secret: 'fGGgdqqcx5t3cRfw'       
}),
headers: {
content-type: 'application/x-www-form-urlencoded;charset=utf-8'
}
}).then(result => { 
console.log(result.data);
}).catch(error => { 
console.log(error);
});

当我运行代码时,即使在确保code没有过期(在30分钟过期时间之前(,我也会收到以下错误:

data: {
error: 'invalid_redirect_uri',
error_description: 'Unable to retrieve access token: appid/redirect uri/code verifier does not match authorization code. Or authorization code expired. Or external member binding exists'
}

然而,当我在命令行中使用curl做同样的事情时,我可以获得访问代码:

curl -ik -X POST https://www.linkedin.com/oauth/v2/accessToken 
-d grant_type=authorization_code 
-d code=AQSow7V6s2F2koWzIsnVKcQGt_cHtsM1F3FHZOrEV0UY1KIFkWiFJpi8dt1NtjuZMOO6-NStoCjTf58awk6GBcH2XQRctt7IBtel4Oeop5yVIBqiedk8qxlIlbkMxlfGg1gCVoupXL6xUc3-jegKYDPSe0rl4mygdpIzGdej2_hhJ827vJcojtvaMXCCGw 
-d redirect_uri=https%3A%2F%2Fwww.linkedin.com%2Fcompany%2Ftttrrr878 
-d client_id=99blt2z20qlm3d 
-d client_secret=fGGgdqqcx5t3cRfw

知道为什么会发生这种事吗?这与此有关吗问题

您的代码看起来是正确的。问题是因为您正在对redirect_uri参数进行url编码,请删除该参数,它应该可以工作。

您只需要在从浏览器进行访问代码的初始请求时对redirect_uri参数进行url编码。

最新更新