web-dev-qa-db-ja.com

JWTの有効期限の問題

ご存じのとおり、セッションベースではなくトークンベースの認証を使用することには、いくつかの理由があります。

セッションベースでは、もちろん有効期限があります。したがって、ユーザーがしばらくアクティブでない場合、セッションは期限切れになります。しかし、期限が切れる前に、サーバーにリクエストを送信すると、彼の時間は延長されます。

すばらしいチュートリアル here についてJWTがあります。 トークンの有効期限について質問があります。有効期限を100秒に設定して、トークンに署名したとします。ユーザーがアクティブかどうかは関係ありません。 100秒後、そのトークンは無効になります。これはユーザーを悩ませます。時間を延長する方法はありますか?

それは本当のアプローチですか、それとも私には間違いがありますか?何か案が?

6
Vahid Najafi

質問を正しく理解していれば、作成中にJWTトークンの有効期限を変更するのはかなり簡単です...

「exp」(有効期限)クレームは、JWTが処理のために受け入れられてはならない有効期限を識別します。 「exp」クレームの処理では、現在の日付/時刻が「exp」クレームにリストされている有効期限の日付/時刻より前でなければならない(MUST)。

詳細はこちら https://tools.ietf.org/html/rfc7519#section-4.1.4

基本的にexpキーはUNIXタイムスタンプを取得します-タイムスタンプを今から100秒以上に設定すると、目標を達成できます。

トークンを「更新」するには、APIに有効なJWTを受信し、有効期限が更新された同じ署名付きJWTを返すサービスが必要です。

6
Maxwelll

これ以上の情報は提供しませんでしたが、Webブラウザー認証にJWTを使用することを想定しています。 httpOnlyおよびsecure属性を使用してJWTをCookieに保存し、Cookieの有効期限を十分に長く(おそらく1年)設定し、JWTの内部にclaimsセットexpプロパティをもっと短い時間に(おそらく1週間か何か)。これで、すべてのリクエストでCookieがサーバーに送信されるため、有効期限を確認できます。このようなもの :

if(decodedJwt.exp < Date.now()){
  //token is valid, do your stuff
}else {
  //token expired, regenerate it and set it to the cookie
  //also update the expire time of the cookie 
}
0
shahin gh