首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当向比特桶访问令牌终结点提交口香糖帖子时出现错误请求

当向比特桶访问令牌终结点提交口香糖帖子时出现错误请求
EN

Stack Overflow用户
提问于 2013-10-06 04:55:32
回答 1查看 2.6K关注 0票数 1

我一直试图使用OAuthv1.a和位桶实现一个简单的身份验证流。当我使用先前提供的验证器和oauth_token请求访问令牌时,就会发生问题。我总是得到一个400错误,没有真正的说明原因。

代码语言:javascript
复制
Client error response
[status code] 400
[reason phrase] BAD REQUEST
[url] https://bitbucket.org/api/1.0/oauth/access_token?oauth_consumer_key=<snip>&oauth_nonce=fba24cfb3147ca7d32b3924fad43fd509bbb9bc1&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1381034857&oauth_token=fFz369NUmCHNyn7PGj&oauth_verifier=6724267371&oauth_version=1.0&oauth_signature=1H7%2Bvx0fVh2Sj%2FcDAE2QzkTx8us%3D

正如文档中所描述的,我正在使用guzzle中的OauthPlugin类来构建已签名的参数和提交post请求。有没有人与任何其他OAuthv1供应商或比特桶有类似的问题?

代码语言:javascript
复制
$client = new Client('https://bitbucket.org/api/1.0/');

    $oauth  = new OauthPlugin( array(
        'request_method' => OauthPlugin::REQUEST_METHOD_QUERY,
        'consumer_key'  => Config::get('oauthv1.key'),
        'token' => Input::get('oauth_token'),
        'verifier' => Input::get('oauth_verifier')
        )
    );

    $client->addSubscriber($oauth);
    $client->post('oauth/access_token')->send();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-23 20:38:10

即使Bitbucket API文档没有提到它,对oauth/access_token端点的调用也需要consumer_secret和oauth_token_secret。当您创建应用程序时,用户秘密由Bitbucket生成,并且应该存储在您的配置中。您可以从对oauth/request_token的调用的响应中获得oauth_token_secret。只需将其保存在会话中,就可以在获取访问令牌时使用它。

请求请求令牌:

代码语言:javascript
复制
$client = new Client('https://bitbucket.org/api/1.0');
$oauth = new OauthPlugin(array(
    'consumer_key'    => $app['bitbucket.key'],
    'consumer_secret' => $app['bitbucket.secret'],
    'callback'        => 'http://mysite.local/callback',        
));
$client->addSubscriber($oauth);
$response = $client->post('oauth/request_token')->send();

// Parse the response
parse_str($response->getBody(), $result);

// Save the token secret in the session
$app['session']->set('oauth_token_secret', $result['oauth_token_secret']);

// Redirect to Bitbucket to authorize the application
return $app->redirect(sprintf('https://bitbucket.org/api/1.0/oauth/authenticate?oauth_token=%s', $result['oauth_token']));

请求访问令牌:

代码语言:javascript
复制
$token       = $app['request']->get('oauth_token');
$verifier    = $app['request']->get('oauth_verifier');
$tokenSecret = $app['session']->get('oauth_token_secret');

$client = new Client('https://bitbucket.org/api/1.0');
$oauth = new OauthPlugin(array(
    'consumer_key'    => $app['bitbucket.key'],
    'consumer_secret' => $app['bitbucket.secret'],
    'token'           => $token,
    'token_secret'    => $tokenSecret,
    'verifier'        => $verifier,
));
$client->addSubscriber($oauth);
$client->post('oauth/access_token')->send();

// Parse the response
$response = parse_str($response->getBody(), $result);

// Get the access token
$accessToken = $result['oauth_token'];
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19205566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档