Jawbone UP API oAuth 和访问令牌
Jawbone UP API oAuth and Access Tokens
我今天开始研究 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
URL 的参数,我被发送到 Jawbone 并按预期得到提示。当我接受授权时,我会按预期被踢回 my-site.com,并使用 URL 中的代码。然后我像这样使用代码
$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": {
}
}
令牌永远不会改变,即使在隐私浏览中 session,即使我使用提供的 refresh_token
和正确的 API 调用成功刷新 - 调用成功,但是Jawbone 给了我相同的标记。如果我通过 Jawbone API 控制台测试相同的流程,请求 headers 中的 Bearer 令牌与我在此处获得的不同。请注意,当我尝试使用我妻子的 Jawbone 凭证进行相同的过程时,我得到了相同的 access_token。
终于弄清楚发生了什么,并从 Jawbone 那里得到了反馈。事实证明,如果您对两个不同的客户端使用相同的身份验证,它们会在后端发生冲突。
对于遇到此问题的任何其他人,请勿同时在两个不同的上下文中使用相同的登录名,因为它会以奇怪的方式重置身份验证。
在我们的案例中,我们有经常在开发人员之间共享的测试用户帐户,因为除非您拥有实际设备,否则有时很难获得真实数据。这导致 'duplicate' 次登录,使 Jawbone 代码异常混乱。
我们得到了 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
URL 的参数,我被发送到 Jawbone 并按预期得到提示。当我接受授权时,我会按预期被踢回 my-site.com,并使用 URL 中的代码。然后我像这样使用代码
$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": {
}
}
令牌永远不会改变,即使在隐私浏览中 session,即使我使用提供的 refresh_token
和正确的 API 调用成功刷新 - 调用成功,但是Jawbone 给了我相同的标记。如果我通过 Jawbone API 控制台测试相同的流程,请求 headers 中的 Bearer 令牌与我在此处获得的不同。请注意,当我尝试使用我妻子的 Jawbone 凭证进行相同的过程时,我得到了相同的 access_token。
终于弄清楚发生了什么,并从 Jawbone 那里得到了反馈。事实证明,如果您对两个不同的客户端使用相同的身份验证,它们会在后端发生冲突。
对于遇到此问题的任何其他人,请勿同时在两个不同的上下文中使用相同的登录名,因为它会以奇怪的方式重置身份验证。
在我们的案例中,我们有经常在开发人员之间共享的测试用户帐户,因为除非您拥有实际设备,否则有时很难获得真实数据。这导致 'duplicate' 次登录,使 Jawbone 代码异常混乱。
我们得到了 Jawbone 开发人员的确认,他 运行 在开发内部应用程序时遇到了同样的问题......