0

私たちが構築している PHP ベースの API に JWT を実装するための調査を行ってきましたが、現時点で最も混乱しているのはリフレッシュ トークンです。私が収集したものから、最初の認証中にアクセストークンとリフレッシュトークンの両方を取得し、リフレッシュトークンを使用すると、基本的にこの最初の認証ステップをスキップして、必要に応じて新しい新しいアクセストークンを取得できるようになります. 私がこれを正しく理解していれば、生成されたリフレッシュ トークンは、それ自体を認証したばかりのクライアントとペアになったデータベースに格納する必要があります。アクセス トークンが非常に短い時間 (たとえば 1 分間) しか有効でない場合、API を使用する非常にビジーなクライアントは、更新ステップを実行するために毎分データ ストアにクエリを実行する可能性があることを意味しますか (更新が有効かどうかを確認するため)。トークンが存在する/まだ有効である/取り消されていない/など)?だろう

4

2 に答える 2

0

アクセス トークンはユーザー DB の DB キャッシュのようなもので、有効期限はそのキャッシュ エントリの TTL です。アクセス トークンの有効期限は、ユーザー DB に対してユーザーを検証する頻度のハート ビートと考えてください。ユーザー DB の負荷が高くなると、アクセス トークンの有効期限が長くなります。

リフレッシュ トークンも JWT である可能性があるため、DB/memcache で検索する必要はありません。通常、アクセス トークンの有効期限が切れると、ユーザー アカウントがロックされていないこと、ユーザーがパスワードを変更していないことなどを確認します。問題がなければ、新しいアクセス トークンを発行します。

于 2016-10-27T09:46:15.867 に答える
0

アクセス トークンが短時間 (1 分) 存続する場合、もちろんユーザーが 1 分以上滞在する場合は、1 分ごとに新しいトークンを生成する必要があります。更新トークンは、構成に応じて次のことができます。

  • 最初の使用後に有効期限が切れる
  • 一定時間 (例: 14 日) 後に期限切れになるため、1 つの更新トークンで多くのアクセス トークンを生成できます。
  • 期限切れになることはなく、取り消すことしかできません (たとえば、新しい更新トークンを生成することによって)

あなたの場合、 Memcachedを使用して、ユーザーごとに独自の更新トークンを保存できると思います。しかし、お聞きしてもよろしいですか?アクセス トークンの有効期限が 1 分後に切れる理由は何ですか?

たとえば、最初にリフレッシュ トークンが Memcached に存在するかどうかを確認し、存在しない場合はそれを Memcached に追加してから使用できます。

<?php
$m = new Memcached();
$m->addServer('localhost', 11211);

$user_id = 1;    
$refresh_token = $m->get($user_id."_refresh_token")

if (!refresh_token) {
    if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
        $token = 'Some SQL query to get refresh token';
        $m->set($user_id."_refresh_token", $token );
        $refresh_token = $m->get($user_id."_refresh_token");
    } else {
        /* log error */
        /* ...       */
    }
}
于 2016-10-27T06:57:36.800 に答える