3

今日、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/authURL に添付されたパラメーターであり、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 を取得することに注意してください。

4

1 に答える 1

1

最終的に何が起こっているのかを理解し、それについて Jawbone から連絡がありました。2 つの異なるクライアントで同じ認証を使用すると、バックエンドで衝突が発生することが判明しました。

この問題に遭遇した人は、奇妙な方法で認証をリセットするため、2 つの異なるコンテキストで同じログインを同時に使用しないでください。

私たちの場合、実際のデバイスを持っていないと実際のデータを取得するのが難しい場合があるため、開発者間で共有されることが多いテスト ユーザー アカウントがあります。これにより、「重複」ログインが発生し、Jawbone コードがおかしくなりました。

内部アプリの開発中に同じ問題に遭遇した Jawbone 開発者から確認を得ました.....

于 2015-10-07T05:14:45.383 に答える