LinkedIn OAuth授权始终返回invalid_client错误求助
排查LinkedIn OAuth2获取AccessToken时的401 invalid_client错误
针对你遇到的问题,结合LinkedIn OAuth2的特性,给你几个针对性的排查和解决方向:
1. 改用HTTP Basic认证方式提交客户端凭证
LinkedIn的AccessToken接口支持两种客户端认证方式,表单提交client_id/client_secret有时会因为密钥中的特殊字符(比如你的密钥里的.、_)编码解析问题导致失败,改用HTTP Basic Auth更可靠:
修改你的PHP代码如下:
$url = 'https://www.linkedin.com/oauth/v2/accessToken'; // 只保留非凭证类参数 $curlPostarray = array( 'grant_type' => 'authorization_code', 'code' => $code, 'redirect_uri' => $redirect_uri ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 建议开启SSL验证,更安全 curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($curlPostarray)); // 添加Basic Auth头 $authHeader = base64_encode("$client_id:$client_secret"); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/x-www-form-urlencoded', "Authorization: Basic $authHeader" )); $data = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
2. 严格校验redirect_uri的完全匹配
LinkedIn对redirect_uri的校验极其严格,必须和你在LinkedIn开发者后台配置的完全一致:
- 检查协议:必须是
https(LinkedIn现在要求生产环境必须用HTTPS) - 检查路径:大小写、末尾是否有斜杠、参数(如果有的话)都要完全匹配
- 示例:后台配置的是
https://www.example.com/slpw/plugin_sociallogin/linkedinredirect.php,实际请求里不能写成https://www.example.com/slpw/plugin_sociallogin/或者其他变体
3. 确认授权码的有效性
- LinkedIn的授权码只能使用一次,重复使用会直接返回认证失败
- 授权码有效期很短(通常5分钟),确保你用的是刚获取的新鲜授权码,不要用过期的
4. 检查应用的状态和权限
- 确认你的LinkedIn应用已经通过审核(即使是开发测试阶段,也要确保应用状态是可访问的)
- 检查应用是否开启了OAuth2相关的权限,确认
client_id和client_secret确实属于该应用
用Rested工具测试时,也可以切换到Basic Auth模式,输入你的client_id和client_secret,然后POST参数只传grant_type、code、redirect_uri,看是否能成功获取token。
内容的提问来源于stack exchange,提问作者Adrian Jones
相关产品推荐
相关产品推荐

