認証
認証とは、ウェブサイトのユーザーなどの主体が、自称する人物であることを確認するプロセスです。ユーザーにウェブサイトへのログインを求めたい場合、認証について考える必要があるでしょう。
ユーザーがウェブサイトにログインできる場合、通常はログインユーザーが実行できることやアクセス可能なデータのうち、一般公開したくないものがあります。例えば、ログインユーザーは以下のようなことが可能になります。
- 料金を支払ったサービスを使用する
- お金を使う
- 個人または企業の非公開情報にアクセスする
- アカウントに関連付けられたペルソナで他者と対話する
これらの機能に加え、ユーザーアカウントへのアクセスは攻撃者にとって重要な対象となります。攻撃者が正当なユーザーを装ってサイトにログインできれば、例えばユーザーの個人データ、金融資格情報、企業機密などにアクセスして悪用する可能性があります。また、サイト上でユーザーになりすますことで、評判の毀損や金銭的損害が発生する恐れもあります。
このガイドシリーズでは、ウェブ上でユーザーを認証するために利用できる主な手法と、それらの最良の取り組みについて見ていきます。
認証方式
この一連のガイドでは、次の認証システムについて説明します。それぞれのシステムは単独で展開することも、他のシステムと組み合わせて展開することも可能です。これにより、ユーザーが使用するシステムを選択できるようにしたり、多要素認証システムを実装したりすることができます。
- パスワード
-
パスワードは、ユーザーがログイン時にウェブサイトに提示する比較的長く有効な秘密情報です。ウェブサイトはパスワードを安全に格納された変換値と比較し、一致した場合にユーザーをログインさせます。パスワードには多くの既知のセキュリティ上の弱点があり、この記事ではそれらを最小限に抑えるための最善の取り組みについて説明します。
- ワンタイムパスワード (OTP)
-
ワンタイムパスワードとは、単一のログイン試行に固有の生成コードです。ウェブサイトは、メールなどの別個のチャネルでコードをユーザーに送信するか、ユーザーの端末が独立してコードを生成します。ユーザーはそのコードをサイトに入力してログインします。
- 連合アイデンティティ
-
ほとんどの認証システムには、ユーザーとログイン先のウェブサイトの2つの当事者が存在します。連合システムでは、これに第三の当事者である ID プロバイダーが加わります。ユーザーがウェブサイトにログインしようとする際、ウェブサイトは ID プロバイダーにユーザーの身元確認を依頼し、確認が成功した場合にユーザーをログインさせます。
- パスキー
-
パスキーにより、ウェブサイトはユーザーがサイト上でパスワードやその他の秘密コードを保有することなく、ユーザーを認証することができるようになります。
パスキーを使用するシステムでは、ユーザーの端末は特定のサイトへのユーザー登録を表す暗号鍵ペアを格納します。ユーザーがサイトにログインしようとすると、サイトは端末にチャレンジを送信します。端末は秘密鍵でそのチャレンジを署名し、結果をウェブサイトに送信します。ウェブサイトは署名を検証し、ユーザーをログイン可能にします。
パスキーはウェブ認証 API を使用して実装されます。
セッション管理
ウェブサイトがユーザーを認証した後、通常はそのユーザーを再認証なしでログイン状態に保ちたいと考えます。これは一定時間、あるいはユーザーがログアウトするまで無期限に適用されます。ウェブサイトは通常、秘密のセッション識別子を含むクッキーを設定するか、暗号学的に署名されたオブジェクト(JSON Web Token(JWT) など)を使用してこれを実現します。
セッション管理ガイドでは、セッション管理の最善の取り組みの概要を説明しています。