我在调用Linkedin API以获得访问令牌时遇到以下错误:
“无法检索访问令牌:appid /重定向uri /代码验证程序与授权代码不匹配。或者授权代码已过期。或者存在外部成员绑定”
这是我所说的链接:
有人可以在这里建议我做错了什么吗?我已经遍历了这里提供的大多数答案,但是没有运气。
答案 0 :(得分:0)
您应通过身份验证并要求令牌。 然后,当您拥有令牌时,就可以继续您的请求。
这是因为LinkedIn正在使用Oauth2 auth
答案 1 :(得分:0)
检查并确保您的客户端ID,客户端密钥和重定向URI与LinkedIn开发人员应用程序授权设置的配置相匹配。
答案 2 :(得分:0)
我遇到了同样的问题。我尝试将这些API与android一起使用,尤其是与AppAuth库一起使用。该库自动在请求中也包含code_verifier参数,如果添加它,您将获得不同的响应。代码验证程序可以是随机字符串,但是您必须将其同时发送到/oauth/v2/authorization
和/oauth/v2/accessToken
。
添加完之后,我得到了另一个错误,那就是access_denied
和一个500 Internal Server Error
。从这里开始,我对正在发生的事情一无所知,LinkedIn开发人员的支持只是个玩笑。
PS:LinkedIn的文档中未提及code_verifier参数,但服务器会要求它,并且它是OAuth2的STANDARD参数,如您所见here
PPS:您是否正在使用Content-Type
= x-www-form-urlencoded
的POST请求?您在此处发布的URL看起来像是一个GET,带有作为查询参数传递的参数,而不是带有urlencoded形式的POST
编辑:我终于开始工作了!您不需要code_verifier
,对我来说,诀窍是删除state
参数。删除后,我获得了访问令牌。我比以往任何时候都更讨厌Linkedin。
答案 3 :(得分:0)
下面的代码将帮助您获取访问令牌
$params = array('grant_type' => 'authorization_code',
'client_id' => $this->api_key,
'client_secret' => $this->api_secret,
'code' => $_GET['code'],
'redirect_uri' => base_url().$this->redirect,
);
// Access Token request
$url = 'https://www.linkedin.com/oauth/v2/accessToken?' . http_build_query($params);
$data_len = strlen(http_build_query($params));
// Tell streams to make a POST request
$context = stream_context_create(
array('http' =>
array('method' => 'POST','header'=> 'Content-Length: 0'
)
)
);
// Retrieve access token information
$response = file_get_contents($url, false, $context);
$token = json_decode($response);
return $token->access_token;