web-dev-qa-db-ja.com

Java更新トークンワークフローの質問を含むSpring JWT

Java Springを使用したAPI JWT更新トークンワークフローに関していくつか質問があります。

これがこれまでにあります:

  1. ユーザーは/ users/loginにログインします-成功した場合、2つのヘッダーを持つ応答がAuthorizationとRefreshで返されます。これには2つのトークンが含まれています-1つは30分の有効期限が短く、もう1つは4時間の有効期限が長いトークンです。
  2. その後、Authorizationヘッダーを使用して他のすべてのエンドポイントにアクセスできます。
  3. ある時点でエンドポイントにアクセスすると、トークンが期限切れになると、エラー(UNAUTHORIZED)を受け取ります。
  4. そして、彼が与えられた更新トークンを使用して/ token/refreshへのリクエストを実行する必要があります。

質問:

  • 私はそれをセットアップして、許可トークンがクレーム:type = authを持ち、更新トークンがクレーム:type = refreshを持つようにしました。 2つのトークンを区別する最良の方法は何ですか。
  • 有効なトークンのないリクエストと区別するために、ステップ3で(無許可ではなく)エラーをどうするか
  • / token/refreshは現在認証を要求しません。それでいいの?
  • / token/refreshエンドポイントがPOSTヘッダー付き、POSTパラメーター付き、またはGET付きヘッダーである必要があります。
4
D.Tomov

2つのトークンを区別する最良の方法は何ですか。

更新トークンは、JWTである必要はありません。私は単にランダムな英数字の文字列を生成することを好みます。更新トークンには追加情報は含まれません。リフレッシュトークンの有効性を確認するには、データベースを検索する必要があります。リクエストのどこに表示されるかで区別します。承認トークン(アクセストークン)は、選択したヘッダーに表示されます。

有効なトークンのないリクエストと区別するために、ステップ3で(無許可ではなく)エラーをどうするか

401 Unauthorizedを送信するのがまさにその方法です。 401はクライアントに、現在リソースにアクセスできないことを伝えますが、リソースに再度アクセスできるようにアクションを実行できます(ログイン/更新トークン)。反対側の403は、リソースが彼に属していないことをクライアントに伝え、彼は許可を要求する必要があります。管理者に連絡する

/ token/refreshは現在認証を要求しません。それでいいの?

いいえ、認証は必要ありません。

/ token/refreshエンドポイントがPOSTヘッダー付き、POSTパラメーター付き、またはGET付きヘッダーである必要があります。

通常、GETエンドポイントは読み取り専用であり、リソースを変更しないでください。 POSTおよびPUTエンドポイントはミューテーション用です。この場合、POSTパラメータと専用URLを使用します(例:/ token/refresh)

6
ygor