私たちが構築している PHP ベースの API に JWT を実装するための調査を行ってきましたが、現時点で最も混乱しているのはリフレッシュ トークンです。私が収集したものから、最初の認証中にアクセストークンとリフレッシュトークンの両方を取得し、リフレッシュトークンを使用すると、基本的にこの最初の認証ステップをスキップして、必要に応じて新しい新しいアクセストークンを取得できるようになります. 私がこれを正しく理解していれば、生成されたリフレッシュ トークンは、それ自体を認証したばかりのクライアントとペアになったデータベースに格納する必要があります。アクセス トークンが非常に短い時間 (たとえば 1 分間) しか有効でない場合、API を使用する非常にビジーなクライアントは、更新ステップを実行するために毎分データ ストアにクエリを実行する可能性があることを意味しますか (更新が有効かどうかを確認するため)。トークンが存在する/まだ有効である/取り消されていない/など)?だろう
2 に答える
アクセス トークンはユーザー DB の DB キャッシュのようなもので、有効期限はそのキャッシュ エントリの TTL です。アクセス トークンの有効期限は、ユーザー DB に対してユーザーを検証する頻度のハート ビートと考えてください。ユーザー DB の負荷が高くなると、アクセス トークンの有効期限が長くなります。
リフレッシュ トークンも JWT である可能性があるため、DB/memcache で検索する必要はありません。通常、アクセス トークンの有効期限が切れると、ユーザー アカウントがロックされていないこと、ユーザーがパスワードを変更していないことなどを確認します。問題がなければ、新しいアクセス トークンを発行します。
アクセス トークンが短時間 (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 */
/* ... */
}
}