JWTの説明の前に、まずはトークンベースの認証を解説します。トークンベースの認証とは、ユーザーが自分のアイデンティティを確認し、代わりに一意のアクセストークンを受け取ることを可能にするプロトコルです。トークンの存続期間中、ユーザーはトークンが発行されたWebサイトやアプリにアクセスできます。同じトークンで保護されたWebページ/アプリ/リソースに再度アクセスするたびに、資格情報を再入力する必要はありません。
認証トークンは、刻印されたチケットのように機能します。認証トークンが有効である限り、ユーザーはアクセスを保持します。ユーザーがログアウトするか、アプリケーションを終了すると、認証トークンは無効になります。
トークンベースの認証は、従来のパスワードベースまたはサーバーベースの認証手法とは異なります。認証トークンはセキュリティの第2レイヤーを提供し、管理者は各アクションとトランザクションを詳細に制御できます。
しかし、トークンを使用するには、コーディングに若干のノウハウが必要です。ほとんどの開発者は手法を素早く習得しますが、ある程度の学習も必要です。
掘り下げて理解することで、トークンが自身や自社に適しているかどうかを判断できるようになります。
→Okta Japanの資料請求はこちら
認証トークンの歴史
認証と認可は異なりますが、関連する概念です。認証トークンが登場する前は、パスワードとサーバーを使用していました。適切なユーザーが適切なタイミングで適切な対象にアクセスできるようにする上で、従来の方法は必ずしも効果的だったわけではありません。
パスワードの場合、一般的には以下が関与します。
- ユーザーの生成。誰かが、文字/数字/記号の組み合わせを考えます。
- 記憶。その人物は、その一意の組み合わせを記憶する必要があります。
- 反復。そのユーザーが何かにアクセスする必要があるときは、毎回パスワードを入力する必要があります。
パスワードの窃取はよくあることです。実際、パスワード窃取の初期の記録は1962年まで遡ります。パスワードをすべて記憶できないために、ユーザーは以下のような方法でごまかそうとします。
- すべてメモする。パスワードを紙切れにメモすることは、非常に大きなリスクです。
- 繰り返し使用する。複数の場所で同じパスワードを繰り返し使用する傾向が見られます。1つのパスワードが侵害されると、多くのアカウントが脆弱になる可能性があります。
- 少しだけ変える。パスワードの更新を求めるメッセージが表示されたときに、文字や数字を1つだけ変更する人がいます。
パスワードはサーバー認証も必要とします。ユーザーがログオンするたびに、コンピューターはトランザクションの記録を作成します。それに応じてメモリの負荷が増加します。
トークン認証は異なります。
トークン認証の場合、セカンダリサービスがサーバー要求を検証します。検証が完了すると、サーバーはトークンを発行し、要求に応答します。
ユーザーは依然としてパスワードを1つ記憶する必要があるかもしれませんが、トークンが提供するアクセス形式では窃取や侵害がはるかに困難です。また、セッションのレコードはサーバーの領域をあまり必要としません。
認証トークンの3つのタイプ
いずれの認証トークンもアクセスを許可しますが、タイプによって動作が若干異なります。
認証トークンには、一般的に以下の3タイプがあります。
- 接続:キー、ディスク、ドライブ、その他の物理的なアイテムがシステムに接続することで、アクセスできます。USBデバイスやスマートカードを使用するログインは、接続されたトークンを使用するアクセスです。
- 非接触:デバイスはサーバーと通信するために十分近くにありますが、接続はしません。Microsoftのいわゆる「マジックリング」は、この種のトークンの一例です。
- 切断:デバイスが長距離でサーバーと通信でき、別のデバイスに触れる必要はまったくありません。二要素認証プロセスで携帯電話を使用するログインは、このタイプのトークンを使用するアクセスです。
これら3つのシナリオのいずれでも、ユーザーがパスワードの入力や質問への回答といったアクションを実行すると、プロセスが開始します。しかし、これらの予備的な手順を完璧に実行しても、アクセストークンを利用しなければアクセスできません。
トークン認証の4つの簡単なステップ
トークンベースの認証システムを使用すると、資格情報を一度検証するだけでアクセスできます。このとき、特定の期間だけアクセスを許可するトークンがユーザーに付与されます。
このプロセスは、以下のように機能します。
- 要求:ユーザーが、サーバーまたは保護されたリソースへのアクセスを要求します。このとき、パスワードを使用したログインや、指定された他のプロセスが関与することがあります。
- 検証:サーバーが、ユーザーがアクセスしてよいと判断します。このとき、ユーザー名とパスワードの照合や、指定された他のプロセスが関与することがあります。
- トークン:サーバーが、認証デバイス(リング、キー、携帯電話など)と通信します。検証後、サーバーはトークンを発行してユーザーに渡します。
- ストレージ:動作が継続する間、トークンはユーザーのブラウザ内に留まります。
ユーザーがサーバーの別の部分にアクセスしようとすると、トークンはサーバーと再び通信します。アクセスは、トークンに基づいて許可または拒否されます。
管理者は、トークンの制限を設定します。たとえば、ユーザーがログアウトすると即座に破棄されるワンタイムトークンを設定できます。また、指定した期間が終了するときにトークンが自己破壊するように設定することも可能です。