ご存じのとおり、セッションベースではなくトークンベースの認証を使用することには、いくつかの理由があります。
セッションベースでは、もちろん有効期限があります。したがって、ユーザーがしばらくアクティブでない場合、セッションは期限切れになります。しかし、期限が切れる前に、サーバーにリクエストを送信すると、彼の時間は延長されます。
すばらしいチュートリアル here についてJWT
があります。 トークンの有効期限について質問があります。有効期限を100秒に設定して、トークンに署名したとします。ユーザーがアクティブかどうかは関係ありません。 100秒後、そのトークンは無効になります。これはユーザーを悩ませます。時間を延長する方法はありますか?
それは本当のアプローチですか、それとも私には間違いがありますか?何か案が?
質問を正しく理解していれば、作成中にJWTトークンの有効期限を変更するのはかなり簡単です...
「exp」(有効期限)クレームは、JWTが処理のために受け入れられてはならない有効期限を識別します。 「exp」クレームの処理では、現在の日付/時刻が「exp」クレームにリストされている有効期限の日付/時刻より前でなければならない(MUST)。
詳細はこちら https://tools.ietf.org/html/rfc7519#section-4.1.4
基本的にexp
キーはUNIXタイムスタンプを取得します-タイムスタンプを今から100秒以上に設定すると、目標を達成できます。
トークンを「更新」するには、APIに有効なJWTを受信し、有効期限が更新された同じ署名付きJWTを返すサービスが必要です。
これ以上の情報は提供しませんでしたが、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
}