[英]Linkedin - Unable to retrieve access token
为访问令牌调用 Linkedin API 时出现以下错误:
“无法检索访问令牌:appid/redirect uri/code verifier 与授权码不匹配。或授权码已过期。或存在外部成员绑定”
这是我正在调用的链接:
有人可以建议我做错了什么或在这里遗漏了什么。 我已经完成了这里提供的大部分答案,但没有运气。
您应该通过身份验证并要求获得令牌。 然后,当您拥有令牌时,您可以继续您的请求。
这是因为 LinkedIn 使用的是Oauth2 auth
检查以确保您的客户端 ID、客户端密钥和重定向 URI 与您的 LinkedIn 开发人员应用程序授权设置的配置相匹配。
我有相同的问题。 我尝试将这些 API 与 android 一起使用,特别是与 AppAuth 库一起使用。 该库还自动在请求中包含 code_verifier 参数,如果添加它,您将获得不同的响应。 代码验证器可以是随机字符串,但您必须将其发送到/oauth/v2/authorization
和/oauth/v2/accessToken
。
添加后,我收到了一个不同的错误,它只是access_denied
与500 Internal Server Error
。 从这里开始,我对正在发生的事情一无所知,LinkedIn 开发人员支持只是一个笑话。
PS:code_verifier参数没有在LinkedIn的文档提到,但服务器需要它,它是一个的OAuth2标准参数,你可以看到在这里
PPS:您是否使用Content-Type
= x-www-form-urlencoded
的 POST 请求? 您在此处发布的 URL 似乎是带有作为查询参数传递的参数的 GET,而不是带有 urlencoded params 形式的 POST
编辑:我终于让它工作了! 你不需要code_verifier
,对我来说有什么技巧是删除state
参数。 一旦我删除它,我就得到了访问令牌。 我比以往任何时候都更讨厌 Linkedin。
下面的代码将帮助您获取访问令牌
$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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.