トークンベースの認証とは?

トークンベース認証は、ユーザーまたはデバイスの同一性を確認する方法の1つです。これは、対象となるエンティティが事前に発行されたトークンを所有しているかどうかを確認する方法を使用します。

学習目的

この記事を読み終えると、以下のことができるようになります。

  • トークンベース認証の定義
  • トークンベース認証の2つのタイプについて説明する
  • Webアプリケーションにおけるトークン認証とCookieベースの認証の比較

関連コンテンツ


さらに詳しく知りたいとお考えですか?

是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!

当社がお客様の個人データをどのように収集し処理するかについては、Cloudflareのプライバシーポリシーをご確認ください。

記事のリンクをコピーする

トークンベースの認証とは?

トークンベース認証とは、トークンをチェックすることによって同一性を確認するプロセスです。アクセス管理では、サーバーはトークン認証を使用して、ユーザー、API、コンピューター、または他のサーバーの同一性を確認します。

トークンとは、信頼できるソースから発行された象徴的なアイテムのことです。法執行機関の担当者がその権限の正当性を示すために発行したバッジを携帯していることを思い浮かべてください。トークンには、物理的(USBハードキーなど)なものとデジタル的(コンピューターで生成されたメッセージやデジタル署名など)なものがあります。

トークンベース認証は、いくつかの異なるプロセスを参照します。

  1. 物理的なトークンを介した本人確認:これは、ログインに広く使用されている認証要素です。ユーザーは、アカウントやデバイスにサインインする際に、トークンの提示を求められます。(認証要素について、詳しくは認証とは何か?をご覧ください)
  2. WebトークンでIDを再度確認する。ウェブトークンは純粋なデジタルです。Webトークンはサーバーによって生成され、クライアントに送信されます。トークンは各クライアントからのリクエストに添付され、サーバーはクライアントのIDを認識し、クライアントがアクセスできるデータを認識します。この種類のトークンベース認証はクッキーベースの認証とは対照的ですが、同じことを達成する類似の方法です。詳しくは以下をご覧ください。

物理トークンによる認証の仕組みは?

物理トークンによる認証は、通常、ユーザーのログインプロセスで行われます。ユーザーは、他の誰も持っていないアイテムを所有していることを証明する必要があります。その証明方法としては、トークンが表示するコードを入力する、USBで機器に接続する、Bluetoothで接続するなど、さまざまな方法があります。パスワードを入力することで、他の誰も持っていない知識を持っていることを証明するのと同様に、トークンを使うことで、そのユーザーだけが持っているものを証明することができます。

この種類の認証に使われるトークンには、ソフトトークンとハードトークンの2種類があります。

  • ソフトトークンは、デバイスに送信された秘密のコードやメッセージを入力して、デバイスを所有していること証明するものです。多くの場合、スマートフォンにテキストメッセージで送信されるコードという形式をとります。
  • ハードトークンは、ユーザーがコンピューターやモバイル端末に直接接続してログインするためのハードウェアアイテムです。

Webトークンによる認証の仕組みは?

Webトークンはデジタルであり、物理的なアイテムではありません。これは、サーバーからクライアントに送信され、クライアントによって一時的に保存されるメッセージです。クライアントは、クライアントの認証状態を確認するために、サーバーに送信される後続のリクエストにトークンのコピーを含めます。

物理トークン認証がログイン時に本人確認を行うのに対し、Webトークンはログインに成功した際に発行されます。これによりログインしたセッションを有効な状態に保つことができます。

しかし、ユーザーセッションにWebトークンを使用することは、必ずしも理想的ではありません。多くの開発者は、代わりにクッキーを使うことを推奨しています。Webトークンは、サーバーとクライアントの間ではなく、APIのエンドポイント認証やサーバー間の接続の検証に使用するのがよいとされています。

JSON Webトークン(JWT)とは?

Web開発において「Webトークン」は、ほとんどの場合JSON Webトークンを指します。JSON Webトークン(JWT)は、JavaScript Object Notation(JSON)データを含むデジタル署名付きWebトークンを作成するための標準規格です。サーバーは、クライアントの同一性を証明するトークンを作成し、クライアントに送信します。JWTはデジタル署名を使用して、トークンが正当であることを証明します。

JWTは次の3つの要素を含んでいます。

  • ヘッダー:ヘッダーには、JWTに関する情報(JWTのトークンタイプ、署名メソッド)が提供されます。
  • ペイロード:ここには任意のJSONデータを入れることができます。認証のためのJWTペイロードは、ペイロード内のユーザーのIDに関する属性情報(Claim)を含みます。また、ユーザー、サーバー、またはAPIエンドポイントの権限に関する情報も含めることができます。
  • デジタル署名:暗号を使用してヘッダーとペイロードに鍵で署名することで、そこに含まれるデータが正当であることを保証します。デジタル署名は、薬の容器に貼られた不正防止シールのようなものだと考えることができます。

トークンベース(JWT)認証とクッキーベース認証の対比

JWTは、ユーザーがWebアプリケーションにログインした後、認証を維持するために使用されることがあります。しかし、この目的にはCookieも使用することができます。

Cookieは、サーバーからクライアントに送信される小さなデータファイルです。ユーザーがWebアプリケーションにサインインすると、サーバーはCookieを生成し、それをクライアントデバイス(通常はユーザーのコンピュータまたはスマートフォン)に送信します。クライアントデバイスは、ブラウザのキャッシュにCookieを保存し、JWTが使用する方法と同様に、以降のサーバーへのリクエストにCookieのコピーを含めます。ユーザーがサインアウトすると、ブラウザはCookieを削除します。

JWTはペイロードに加えてヘッダーとデジタル署名を含むため、CookieはJWTと比較してファイルサイズが非常に小さくなります。対照的に、Cookieはペイロードだけを含んでいます。このため、ウェブパフォーマンス帯域幅の面ではるかに効率的です。

  • ウェブパフォーマンス:Cookieは、含まれる情報が少ないため、より速く読み込まれます。動画よりも写真の方がより速くダウンロードされることを考えてみてください。
  • 帯域幅:cookieは小さいため、クライアントとサーバー間のネットワークを通過する必要があるデータの総量を削減することができます。結果として、Webアプリケーションの運用者は、JWTと比較してコストを削減できる可能性があります。

JWTには、コンテンツが改ざんされていないことを保証するデジタル署名を含んでいるため、パフォーマンスのための最適化は行われていません。しかし、ウェブアプリケーションがHTTPS推奨)を使用している場合でも、とにかくクッキーは改ざんできないことが重要です。HTTPSはクッキーを暗号化し、クライアントとサーバの間で交換される他のすべてのHTTPデータとともに署名します。攻撃者はオンパス攻撃を実行しない限り転送中に偽造したり傍受することはできません。

JWTはAPIやサーバー間接続に適しています。このような用途では、それほどスケールアップする必要はありません。Webアプリケーションには100万人のユーザーがいるかもしれませんが、100万のAPI接続が行われることはないでしょう。そのため、パフォーマンスや帯域幅に影響を与える可能性は低いでしょう。しかし、APIでは相互TLSのような他の認証方式の方が効率的な場合もあります。相互TLSについて、詳しくはこちらをご覧ください