【问题标题】:Linkedin - Unable to retrieve access tokenLinkedin - 无法检索访问令牌
【发布时间】:2019-04-18 13:12:11
【问题描述】:

在为访问令牌调用 Linkedin API 时出现以下错误:

“无法检索访问令牌:appid/redirect uri/code verifier 与授权码不匹配。或授权码已过期。或存在外部成员绑定”

这是我所说的链接:

https://www.linkedin.com/oauth/v2/accessToken?client_id=L1kfji328dfpoef&client_secret=klOpdfkJHGHuLOm14sdfkOj&grant_type=authorization_code&redirect_uri=http://example.com/linkedin-redirect&code=AQUIdkfdiksdr4D18sdfkiHk52LX5pX_T4AgKOKHU45Hrt7Bcu0ln8d2PITq8DuvNkVftV-plJ2tvOU4TnMAQ-nksdldTYkL902G9p0MKLKkljsd9mtNjjzBgq-lFqlcqtD4T2mYWmW498fJ7GbkDpyiQXHFo6xFsbSdrJxe3dJgh2A5edgpprm3vAY9REVM-Osdfki1

有人可以建议我做错了什么或这里遗漏了什么。我已经完成了这里提供的大部分答案,但没有运气。

【问题讨论】:

  • 作为最佳实践,切勿分享您的客户 ID 或机密。
  • 谢谢!但它都是虚拟钥匙的

标签: php wordpress linkedin linkedin-api


【解决方案1】:

您应该通过身份验证并要求提供令牌。 然后,当您拥有令牌时,您可以继续执行您的请求。

这是因为 LinkedIn 使用的是Oauth2 auth

【讨论】:

    【解决方案2】:

    检查以确保您的客户端 ID、客户端密码和重定向 URI 与您的 LinkedIn 开发人员应用程序授权设置的配置相匹配。

    【讨论】:

    • 是的,完全匹配。
    • 尝试向linkedin.zendesk.com 提交工单,并附上您的所有申请和请求信息。
    【解决方案3】:

    我也有同样的问题。我尝试将这些 API 与 android 一起使用,特别是与 AppAuth 库一起使用。这个库会自动在请求中包含 code_verifier 参数,如果你添加它,你会得到不同的响应。代码验证器可以是随机字符串,但您必须将其发送给/oauth/v2/authorization/oauth/v2/accessToken

    添加后我得到一个不同的错误,它只是access_denied500 Internal Server Error。从这里开始,我不知道发生了什么,LinkedIn 开发人员支持只是一个笑话。

    PS:LinkedIn的文档中没有提到code_verifier参数,但是服务器要求它,它是OAuth2的标准参数,你可以看到here

    PPS:您是否使用Content-Type = x-www-form-urlencoded 的POST 请求?您在此处发布的 URL 似乎是一个 GET,其参数作为查询参数传递,而不是一个带有表单 urlencoded 参数的 POST

    编辑:我终于让它工作了!你不需要code_verifier,对我来说诀窍是删除state 参数。一旦我删除它,我就得到了访问令牌。我比以往任何时候都更讨厌linkedin。

    【讨论】:

      【解决方案4】:

      以下代码将帮助您获取访问令牌

             $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;
      

      【讨论】:

      • 我收到无法打开流:HTTP 请求失败! HTTP/1.1 400 错误请求错误
      猜你喜欢
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 2011-09-30
      • 1970-01-01
      相关资源
      最近更新 更多