向 Discord API 发送 OAuth2 请求时的 invalid_client

Posted

技术标签:

【中文标题】向 Discord API 发送 OAuth2 请求时的 invalid_client【英文标题】:invalid_client When Sending OAuth2 Request to Discord API 【发布时间】:2021-07-21 07:33:22 【问题描述】:

所以我一直在使用 Discord 开发登录系统,这是我遇到的第一个障碍。

我正在尝试 POST 到 /oauth2/token/revoke,但它不断给我返回错误“invalid_client”。

我尝试过使用客户端密码而不使用它,只发送令牌,将名称“access_token”更改为“令牌”,以及其他一些我不记得的事情。

我发送请求的代码是这样的:

session_start();
//debug thing
echo OAUTH2_CLIENT_ID;

$params = array(
    "access_token" => $_SESSION["access_token"],
    "client_id" => OAUTH2_CLIENT_ID
  ); 

  apiRequest("https://discordapp.com/api/oauth2/token/revoke", $params);

该 apiRequest 函数的代码改编自这里的不同线程,如下所示:

function apiRequest($url, $post=FALSE, $headers=array()) 
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

  $response = curl_exec($ch);

  if($post) 
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
  $headers[] = 'Content-Type: application/x-www-form-urlencoded';
  
  $headers[] = 'Accept: application/json, application/x-www-form-urlencoded';

  
    

  if(isset($_SESSION["access_token"]))
    $headers[] = 'Authorization: Bearer ' . $_SESSION["access_token"];

// using this to see my headers
var_dump($headers);

  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

  $response = curl_exec($ch);

$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

  if ($code != 200) 

    //using this to see the error
    echo $response;
    exit();
    fatalError($code, $_SERVER[REQUEST_URI]);
  


  return $response;

是的,访问令牌和客户端 ID 都是有效的。它们在其他请求上正常工作,我已在此页面上显示它们并确认它们是有效的。

有什么想法吗?我错过了什么愚蠢的东西吗?

【问题讨论】:

【参考方案1】:

计算出您需要的字段并稍微摆弄一下 curl,这段代码就可以工作了。

$params = array(
    "token" => $_SESSION["access_token"],
    "client_id" => OAUTH2_CLIENT_ID,
    "client_secret" => OAUTH2_CLIENT_SECRET
  ); 


  $ch = curl_init("https://discord.com/api/oauth2/token/revoke");
  curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  curl_setopt($ch, CURLOPT_POST, 1);

 


    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
    $headers[] = 'Content-Type: application/x-www-form-urlencoded';
 
  $headers[] = 'Accept: application/json';

  
    

    $headers[] = 'Authorization: Bearer ' . $_SESSION["access_token"];


  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

  $response = curl_exec($ch);

$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

  if ($code != 200) 
    #error handling
  

curl_close($ch);

【讨论】:

以上是关于向 Discord API 发送 OAuth2 请求时的 invalid_client的主要内容,如果未能解决你的问题,请参考以下文章

Discord Oauth2 中的 Curl 问题

通过 Oauth2.0 向 Google Latitude API 发送用户新位置

Discord API - 传回生成的 OAuth2 代码的随机“无效代码”错误

discord oauth2 api 调用返回“405:不允许的方法”

发送私信 Discord-api

如何撤销 Discord OAuth2.0 中的令牌?