【问题标题】:Linkedin Oauth Issue - oauth_verifierLinkedin Oauth 问题 - oauth_verifier
【发布时间】:2012-04-24 18:43:23
【问题描述】:

在尝试将我的 JSAPI 令牌交换为 REST Oauth 令牌时遇到一些问题 (https://developer.linkedin.com/documents/exchange-jsapi-tokens-rest-api-oauth-tokens)

我正在使用这个库 - http://code.google.com/p/oauth-php/ - 与 PECL 扩展相反,因为我无法将扩展安装到服务器上。

似乎有很多类似的问题,但没有一个能真正回答这个问题 - 如何使用上述库向 Linkedin 进行身份验证。

我的代码如下:

    $cookie_name        = "linkedin_oauth_" . $this->_c->linkedin_api_key;
    $credentials_json   = stripslashes($_COOKIE[$cookie_name]);
    $credentials        = json_decode($credentials_json);

    // Get the Access Token + Secret
    $access_token_url = 'https://api.linkedin.com/uas/oauth/accessToken';

    OAuthStore::instance("2Leg", array(
        'consumer_key'      => $this->_c->linkedin_api_key,
        'consumer_secret'   => $this->_c->linkedin_api_secret
    ));

    try {

        $request = new OAuthRequester($access_token_url, 'POST', array(
            'xoauth_oauth2_access_token' => $credentials->access_token
        ));

        $result = $request->doRequest();

    } catch(OAuthException2 $e) {

        print_r($e->getMessage());

    }

catch 语句输出:

Request failed with code 400: oauth_problem=parameter_absent&oauth_parameters_absent=oauth_verifier

如何获得这个 oauth_verifier?我的理解是,如果我已经传递了 xoauth_oauth2_access_token,我就不应该需要它?

我检查了所有变量 I.E. $credentials 和 $this->_c 以及所有变量都正确传递。

【问题讨论】:

    标签: php oauth linkedin


    【解决方案1】:

    这实际上是 oauth-php 库中的一个错误。该库错误地处理以 xoauth_* 为前缀的参数,并以与处理 oauth_* 参数相同的方式处理它们。这违反了 OAuth 规范,大多数(全部?)其他 OAuth 库都没有这个问题。解决方法是执行以下操作:

    在文件 OAuthRequestSigner.php 中,找到以下内容:

    1) 在 getAuthorizationHeader 函数中,找到如下行:

    if (strncmp($name, 'oauth_', 6) == 0 || strncmp($name, 'xoauth_', 7) == 0)
    

    并将其更改为:

    if (strncmp($name, 'oauth_', 6) == 0)
    

    2) 在函数 getQueryString 中,找到如下行:

    ||  (strncmp($name, 'oauth_', 6) != 0 && strncmp($name, 'xoauth_', 7) != 0))
    

    并将其更改为:

    ||  (strncmp($name, 'oauth_', 6) != 0)
    

    在那之后,你需要做的基本上和你已经做的一样,如下:

    try {
    
        $request = new OAuthRequester($access_token_url, "POST", array('xoauth_oauth2_access_token' => $access_token));
    
        $result = $request->doRequest();
    
        var_dump($result);
    
    } catch(OAuthException2 $e) {
    
        print_r($e->getMessage());
    
    }
    

    你应该准备好了。如果您还有任何问题,请随时联系我们的developer forums,我本人或团队中的其他人都将很乐意提供帮助。

    享受吧!

    -杰里米

    【讨论】:

    • 我还向包的维护者提交了bug
    • 哇。谢谢杰里米..问题已经解决了!
    • 我的荣幸!即使以我在该主题上的经验,也花了一段时间才找到那个,所以我可以想象它给其他人带来的挫败感。
    猜你喜欢
    • 2011-12-22
    • 2011-01-20
    • 1970-01-01
    • 2012-05-03
    • 2014-06-28
    • 2011-09-11
    • 1970-01-01
    • 2015-10-24
    相关资源
    最近更新 更多