2017-07-26 2 views
0

JWTで最初のAPIを構築しています。私はこの定型プロジェクトを使用しています:https://github.com/krisanalfa/lumen-jwtLaravel LumenでJWTを使用したトークンリフレッシュの流れ

私はそれがうまくいくように管理しましたが、私は大きな問題があります。ユーザトークンは、しばらくして失効し、アプリケーションからログアウトします。私は/api/auth/をリフレッシュするためにトークンをリフレッシュするプロジェクトのドキュメントを読んだが、今は2つの大きな欠点があると私には思われる。

1)トークンをリフレッシュするためにAPIを1回呼び出すだけであれば、X分(トークンの期限切れの時間)ごとに呼び出すタイマーを設定する必要があると思います。

2)ユーザーが3時間コンピュータをオフにすると、再度オンにすると、トークンは既に有効期限が切れているため、リフレッシュは使用できなくなり、ユーザーをログオフします。

私はこれを初めて知ったので、何か不足していますか?トークンリフレッシュサイクルをこれらの欠点なしでどのように動作させることができますか?

答えて

1

あなたの2点を取ってください。

1)トークンを1回だけ有効にすることはできますが、ブラックリスト機能を使用することができます。これは完全には必要ではありません。

自分のプロジェクトでは、トークンに5分間の有効期限を付けましたが、私はまた、すべてのリクエストで新しいトークンが返されるように、(ルートグループにラップされた)認証ルートにjwt-refreshミドルウェアを適用しました。

2)リフレッシュ期限を指定することもできます。期限切れのトークンは、期限切れのトークンを認証できる期間です。これは、通常、トークンよりもはるかに長くなります。私は14日を使いました。

したがって、ユーザーが3時間ウェブサイトを離れて戻ってくると、トークンの有効期限が切れます。しかし、アプリはバックグラウンドでそのトークンをリフレッシュして、元のリクエストを再試行しなければなりません。

それぞれのトークンライフタイムの明らかなセキュリティへの影響を考えます。期限切れのトークンを最大14日間更新することができれば、それをブラックリストに載せない限り、リスクが増加します。

+0

私はこれをやろうとしていますが、DingoはRefreshを呼び出すとトークンの有効性をチェックしていますが、「Token Expired」というメッセージが表示されます。何が起きているのでしょうか? – raphadko

+0

リフレッシュルート 'api.auth.refresh'は' api.auth'ミドルウェアグループの中にあるからです。したがって、ミドルウェアはコントローラルートに到達する前に妥当性をチェックしています。あなたがそれを外に動かすと、うまくいくかもしれません。 – fubar

+0

私はjwt.refreshミドルウェアを使用していますが、最初のリクエストでうまくいきます。その後、新しいトークンを読み取ることができません。私がconsole.logを実行すると(request.getAllResponseHeaders());トークンは表示されず、 "Content-Type:application/json Cache-Control:private、must-revalidate"と表示されます。それを読む方法は? – raphadko

関連する問題