【问题标题】:Request OAuth token from BitBucket从 BitBucket 请求 OAuth 令牌
【发布时间】:2012-09-09 05:32:29
【问题描述】:

过去 4 小时我一直在尝试将 BitBucket 集成到我的应用程序中,但无济于事。

在阅读BitBucket's RESTful API documentation 时,我注意到您需要使用 OAuth — 没关系,我正在使用 J.R Conlin 的 OAuthSimple 库,如果我觉得很好的话(我试过 oauth-php,但它有点复杂 —对于这么小的集成,我不需要所有这些选项)。

据我了解,使用 OAuth 进行身份验证的第一步是通过 POST 请求新令牌。提供必要的参数时,您应该从 BitBucket 获得响应,如下所示:

oauth_token=Z6eEdO8lOmk394WozF9oJyuAv899l4llqo7hhlSLik&oauth_token_secret=Jd79W4OQfb2oJTV0vzGzeXftVAwglnEJ9lumzYcl&oauth_callback_confirmed=true

为此,我使用 cURL 和 OAuthSimple:

$key    = 'key_provided_by_bitbucket';
$secret = 'key_provided_by_bitbucket';
$path   = 'https://api.bitbucket.org/1.0/oauth/request_token';

$params = array(
    'oauth_consumer_key'        => $key,
    'oauth_nonce'               => base_convert(mt_rand(10000, 90000), 10, 32) . 'a',
    'oauth_signature'           => 'HMAC-SHA1',
    'oauth_signature_method'    => 'HMAC-SHA1',
    'oauth_timestamp'           => time(),
    'oauth_callback'            => base_url('dashboard'),
    'oauth_version'             => '1.0a'
);

$oauth  = new OAuthSimple($key, $secret);
$result = $oauth->sign(array(
    'action'        => 'POST',
    'path'          => $path,
    'parameters'    => $params
));

// load resulting url into a string
$ch = curl_init($result['signed_url']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$r = curl_exec($ch);
curl_close($ch);

问题是,当我发送请求时,会发生以下两种情况之一:

  1. 如果我按照此处发布的方式发送,我会收到 401 错误(我可以通过 curl_getinfo($ch) 看到)
  2. 如果我设置 curl_setopt($ch, CURLOPT_POST, 1),我会收到 400 Bad request

结果字符串(存储在$r)是一个空字符串。 signed_url 是一个正确格式的 URL AFAIK,它是这样的:

https://api.bitbucket.org/1.0/oauth/request_token?oauth_callback=http%3A%2F%2Flocalhost%2Fidv&oauth_consumer_key=key_provided_by_bitbucket&oauth_nonce=b47a&oauth_signature=3A1R%2FoKxTqh6Q23poaS%2BVNzhwpE%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1347167282&oauth_version=1.0a

如果我在浏览器的地址栏中手动输入该地址,我将获得 BitBucket API 的身份验证对话框,端口为 443。但我无法使用我的凭据登录。然后它会一直说“无法验证 OAuth 请求。”

我不知道自己做错了什么,因为这是我第一次使用 OAuth。

任何帮助表示赞赏!

【问题讨论】:

  • 运气好吗?我遇到了和你一样的错误......
  • @ericbae 我最终与 BitBucket 的技术支持人员进行了交谈——事实证明,他们的手册中的信息已过时,并且已更正。一旦他们告诉我(并且我进行了必要的路径更改),一切就像魅力一样。确保您使用的是正确的路径(因为 OAuthSimple 效果很好)
  • @AeroCross 你能说出你的答案和/或导致你修复的正确路径吗?
  • 我相信你在谈论上面的 $path 应该是 'bitbucket.org/api/1.0/oauth/request_token' 如果其他人正在查看它,它可以通过,但我现在不断收到“无法验证 OAuth 请求”消息对您遇到的同一问题的任何舔
  • 我已经切换到code.google.com/p/oauth-php,发现它更好更容易

标签: php curl oauth bitbucket bitbucket-api


【解决方案1】:

问题是 Curl 会验证 SSL 证书。

要解决此问题,您可以告诉 Curl 忽略 SSL 证书的验证:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

【讨论】:

    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2011-09-05
    • 2017-10-26
    • 2017-01-10
    • 1970-01-01
    • 2011-09-19
    相关资源
    最近更新 更多