web-dev-qa-db-ja.com

各リクエストで有効期限のないアクセストークンを送信するか、更新トークンを使用するか?

RESTモバイルアプリケーション用のAPIを保護する場合、頻繁に表示されるのは更新トークンの使用です。これらは次の理由で存在します。

  1. アクセストークンには有効期限があります。
  2. ユーザーが資格情報を入力する必要はありません。

更新トークンは、有効期限のない取り消し可能なトークンであり、新しいトークンが期限切れになったときに新しいアクセストークンを取得するために使用できます。 こちら を参照してください。

すべてのAPI呼び出しで、(有効な)アクセストークンが送信されます。有効期限が切れたら、「特別なキー」(更新トークン)を使用して、有効期限が切れていない別のアクセストークンを取得します。

この広く使用されているパターンは、有効期限のないアクセストークンを発行してデバイスに保存するのとは異なり、リフレッシュトークンを保存するのと同じように劣っていますか?

PS:これに対するあなたの答えが各リクエストで有効期限のないトークンを送信することは安全性が低いということである場合(中間者)、私は主張します:それは本当にあなたのAPIがHTTPSを介しているときですか? (それに加えて、doとにかく同じネットワークで有効期限のないトークンを送信します。これを単に「リフレッシュトークン」と呼び、送信頻度を下げます)。

PS2:回答がリフレッシュトークンを取り消す機能に関連している場合、アクセストークンも取り消すことができると私は主張できます。

5
lapin

たとえばJWTトークンを使用する場合、トークンは自己署名されます。
これは、resource serviceauthentication serverと通信しなくてもトークンの整合性を検証できることを意味します。短命のaccess tokensを使用しても問題ありません。
しかし、refresh tokenを使用してaccess tokenから新しいauthentication serverを取得する場合、authentication serverは、セッションが取り消されるか、ユーザーのアカウントがまだ存在し、まだアクティブであり、新しいresource serviceを発行するaccess tokenにアクセスする権限を持っている場合。

その場合、更新トークンとアクセストークンを使用すると、有効期間が短いアクセストークンに対してより単純な検証メカニズムを実装でき、リソースサーバーからの応答が速くなります。

1
Thibault D.