Linkedin-无法检索访问令牌

时间:2019-04-03 11:03:30

标签: php wordpress linkedin linkedin-api

我在调用Linkedin API以获得访问令牌时遇到以下错误:

“无法检索访问令牌:appid /重定向uri /代码验证程序与授权代码不匹配。或者授权代码已过期。或者存在外部成员绑定”

这是我所说的链接:

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

有人可以在这里建议我做错了什么吗?我已经遍历了这里提供的大多数答案,但是没有运气。

4 个答案:

答案 0 :(得分:0)

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

这是因为LinkedIn正在使用Oauth2 auth

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

添加完之后,我得到了另一个错误,那就是access_denied和一个500 Internal Server Error。从这里开始,我对正在发生的事情一无所知,LinkedIn开发人员的支持只是个玩笑。

PS:LinkedIn的文档中未提及code_verifier参数,但服务器会要求它,并且它是OAuth2的STANDARD参数,如您所见here

PPS:您是否正在使用Content-Type = x-www-form-urlencoded的POST请求?您在此处发布的URL看起来像是一个GET,带有作为查询参数传递的参数,而不是带有urlencoded形式的POST

编辑:我终于开始工作了!您不需要code_verifier,对我来说,诀窍是删除state参数。删除后,我获得了访问令牌。我比以往任何时候都更讨厌Linkedin。

答案 3 :(得分:0)

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

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