Jawbone UP API oAuth和访问令牌

时间:2015-03-28 19:36:13

标签: api authentication oauth jawbone

我今天已经开始深入研究Jawbone的UP API,在整个身份验证过程中,一切似乎都很顺利。问题是,一旦我获得访问令牌,它总是相同的令牌,它在我的任何请求中都不起作用,我无法使用refresh_token端点更改它。

oAuth设置:

$url_params = array(
    'response_type' => 'code',
    'client_id' => CLIENT_ID,
    'scope' => array('basic_read', 'extended_read', 'move_read'),
    'redirect_uri' => 'https://my-site.com/up_auth.php',
);

这些是附加到https://jawbone.com/auth/oauth2/auth网址的参数,我会发送给Jawbone并按预期提示。当我接受授权时,我会按照URL中的代码按预期将其踢回my-site.com。然后我使用像这样的代码

$params = array(
    'client_id' => CLIENT_ID,
    'client_secret' => APP_SECRET,
    'grant_type' => 'authorization_code',
    'code' => $code,
);

并将这些参数附加到https://jawbone.com/auth/oauth2/token,最后将其踢回我的服务器,类似于:

{
    "access_token": "REALLY_LONG_STRING",
    "token_type": "Bearer",
    "expires_in": 31536000,
    "refresh_token": "ANOTHER_REALLY_LONG_STRING"
}

当我使用access_token尝试获得此类回复时

$headers = array(
    'Host: my-site.rhcloud.com',
    'Connection: Keep-Alive',
    'Accept: application/json',
    "Authorization: Bearer {$_REQUEST['access_token']}",
);

$ch = curl_init('https://jawbone.com/nudge/api/v.1.1/users/@me/moves');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$o = curl_exec($ch);
curl_close($ch);
var_dump($o);
来自API的

,每次都是响应:

{
    "meta": {
        "code": 401,
        "error_detail": "You must be logged in to perform that action",
        "error_type": "authentication_error",
        "message": "Unauthorized"
    },
    "data": {

    }
}

令牌永远不会改变,即使在私人浏览会话中,即使我使用提供的refresh_token和正确的API调用成功刷新 - 调用成功,但Jawbone给了我相同的令牌。如果我通过Jawbone API控制台测试相同的流,请求标头中的Bearer标记与我在此处获得的标记不同。请注意,当我使用我妻子的Jawbone凭证尝试相同的过程时,我得到相同的access_token。

1 个答案:

答案 0 :(得分:1)

终于找出了Jawbone发生的事情并从中听到了这件事。事实证明,如果您使用与两个不同客户端相同的身份验证,它们会在后端发生冲突。

对于遇到此问题的其他任何人,请不要在两个不同的上下文中同时使用相同的登录,因为它会以奇怪的方式重置身份验证。

在我们的例子中,我们有测试用户帐户,这些用户帐户通常在开发人员之间共享,因为除非您拥有实际设备,否则有时很难获得真实数据。这导致了“重复”登录,导致Jawbone代码发生故障。

我们得到了Jawbone开发人员的确认,他在开发内部应用时遇到了同样的问题......