You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LinkedIn登录获取Access Token失败:参数不匹配或授权码过期

解决OAuth获取Access Token时的"invalid_request"错误

看到你碰到的这个错误,结合错误信息和点击后2秒就报错的情况,我帮你拆解下核心问题点,咱们一步步排查:

  • Redirect URI必须完全匹配
    这是OAuth场景里最容易踩的坑!服务端对redirect_uri的校验极其严格,你在http://localhost/index.php发起授权请求时传递的redirect_uri,必须和回调页面请求token时用的地址完全一致——包括大小写、末尾的斜杠、HTTP/HTTPS协议,哪怕差一个字符都不行。比如授权时传的是http://localhost/callback.php,回调就不能写成http://localhost/callback。

  • 确认授权码的有效性
    错误里提到授权码可能过期,但2秒就报错显然不是正常过期(一般授权码有效期至少几分钟),更可能是这两种情况:

    • 授权码被重复使用:OAuth授权码是一次性的,用过一次就失效,如果你之前测试过一次没成功,再用同一个code请求token肯定会报错,得重新走授权流程生成新的code。
    • AppID不匹配:生成授权码时用的AppID,和请求token时用的AppID必须是同一个,别搞混了测试环境和正式环境的应用ID。
  • 检查Token请求的参数完整性
    错误提示里的"missing required parameters"说明可能漏传了必填参数,你得确保token请求里包含所有必要字段:
    通常需要grant_type=authorization_code、code=拿到的授权码、client_id=你的AppID、client_secret=你的AppSecret、redirect_uri=回调地址这几个参数,同时要避免重复传递同一个参数(比如不小心传了两次code)。

  • 快速验证授权码有效性
    你可以先在回调页面把拿到的code打印出来,确认是正常的字符串,再带着这个code去请求token,排除code本身获取异常的问题。

给你贴个简化的PHP回调页面示例,参考下参数传递的正确姿势:

<?php
// 先拿到授权码
$code = $_GET['code'] ?? '';
if (empty($code)) {
    die('未获取到授权码');
}

// 配置参数(注意要和授权时完全一致)
$client_id = '你的应用ID';
$client_secret = '你的应用密钥';
$redirect_uri = 'http://localhost/你的回调页面.php';
$token_api = '授权服务的token接口地址';

// 构造POST请求参数
$post_data = http_build_query([
    'grant_type' => 'authorization_code',
    'code' => $code,
    'client_id' => $client_id,
    'client_secret' => $client_secret,
    'redirect_uri' => $redirect_uri
]);

// 发起请求
$context = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => 'Content-Type: application/x-www-form-urlencoded',
        'content' => $post_data
    ]
]);
$response = file_get_contents($token_api, false, $context);
var_dump($response);
?>

如果排查完上面几点还是不行,你可以把授权请求的URL和token请求的参数(敏感信息打码)补充出来,方便进一步定位问题。

内容的提问来源于stack exchange,提问作者strangeQuirks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:54:42