トークンベース認証は、ユーザーまたはデバイスの同一性を確認する方法の1つです。これは、対象となるエンティティが事前に発行されたトークンを所有しているかどうかを確認する方法を使用します。
この記事を読み終えると、以下のことができるようになります。
記事のリンクをコピーする
トークンベース認証とは、トークンをチェックすることによって同一性を確認するプロセスです。アクセス管理では、サーバーはトークン認証を使用して、ユーザー、API、コンピューター、または他のサーバーの同一性を確認します。
トークンとは、信頼できるソースから発行された象徴的なアイテムのことです。法執行機関の担当者がその権限の正当性を示すために発行したバッジを携帯していることを思い浮かべてください。トークンには、物理的(USBハードキーなど)なものとデジタル的(コンピューターで生成されたメッセージやデジタル署名など)なものがあります。
トークンベース認証は、いくつかの異なるプロセスを参照します。
物理トークンによる認証は、通常、ユーザーのログインプロセスで行われます。ユーザーは、他の誰も持っていないアイテムを所有していることを証明する必要があります。その証明方法としては、トークンが表示するコードを入力する、USBで機器に接続する、Bluetoothで接続するなど、さまざまな方法があります。パスワードを入力することで、他の誰も持っていない知識を持っていることを証明するのと同様に、トークンを使うことで、そのユーザーだけが持っているものを証明することができます。
この種類の認証に使われるトークンには、ソフトトークンとハードトークンの2種類があります。
Webトークンはデジタルであり、物理的なアイテムではありません。これは、サーバーからクライアントに送信され、クライアントによって一時的に保存されるメッセージです。クライアントは、クライアントの認証状態を確認するために、サーバーに送信される後続のリクエストにトークンのコピーを含めます。
物理トークン認証がログイン時に本人確認を行うのに対し、Webトークンはログインに成功した際に発行されます。これによりログインしたセッションを有効な状態に保つことができます。
しかし、ユーザーセッションにWebトークンを使用することは、必ずしも理想的ではありません。多くの開発者は、代わりにクッキーを使うことを推奨しています。Webトークンは、サーバーとクライアントの間ではなく、APIのエンドポイント認証やサーバー間の接続の検証に使用するのがよいとされています。
Web開発において「Webトークン」は、ほとんどの場合JSON Webトークンを指します。JSON Webトークン(JWT)は、JavaScript Object Notation(JSON)データを含むデジタル署名付きWebトークンを作成するための標準規格です。サーバーは、クライアントの同一性を証明するトークンを作成し、クライアントに送信します。JWTはデジタル署名を使用して、トークンが正当であることを証明します。
JWTは次の3つの要素を含んでいます。
JWTは、ユーザーがWebアプリケーションにログインした後、認証を維持するために使用されることがあります。しかし、この目的にはCookieも使用することができます。
Cookieは、サーバーからクライアントに送信される小さなデータファイルです。ユーザーがWebアプリケーションにサインインすると、サーバーはCookieを生成し、それをクライアントデバイス(通常はユーザーのコンピュータまたはスマートフォン)に送信します。クライアントデバイスは、ブラウザのキャッシュにCookieを保存し、JWTが使用する方法と同様に、以降のサーバーへのリクエストにCookieのコピーを含めます。ユーザーがサインアウトすると、ブラウザはCookieを削除します。
JWTはペイロードに加えてヘッダーとデジタル署名を含むため、CookieはJWTと比較してファイルサイズが非常に小さくなります。対照的に、Cookieはペイロードだけを含んでいます。このため、ウェブパフォーマンスと帯域幅の面ではるかに効率的です。
JWTには、コンテンツが改ざんされていないことを保証するデジタル署名を含んでいるため、パフォーマンスのための最適化は行われていません。しかし、ウェブアプリケーションがHTTPS(推奨)を使用している場合でも、とにかくクッキーは改ざんできないことが重要です。HTTPSはクッキーを暗号化し、クライアントとサーバの間で交換される他のすべてのHTTPデータとともに署名します。攻撃者はオンパス攻撃を実行しない限り転送中に偽造したり傍受することはできません。
JWTはAPIやサーバー間接続に適しています。このような用途では、それほどスケールアップする必要はありません。Webアプリケーションには100万人のユーザーがいるかもしれませんが、100万のAPI接続が行われることはないでしょう。そのため、パフォーマンスや帯域幅に影響を与える可能性は低いでしょう。しかし、APIでは相互TLSのような他の認証方式の方が効率的な場合もあります。相互TLSについて、詳しくはこちらをご覧ください。
利用開始
アクセス管理について
ゼロトラストについて
VPNリソース
用語集