認証 (Authentication) とは何ですか?
TL;DR: 認証 (Authentication) は「どのアイデンティティを所有しているか?」という質問に答えます。
以下は認証の典型的な例です:
- ユーザー名とパスワードでのサインイン
- ソーシャルログイン(例: Google でサインイン)
- マシン間通信 (Machine-to-machine) 認証 (Authentication)(例: API キー)
「あなたは誰ですか?」というフレーズを使用しなかった理由は以下の通りです:
- アイデンティティとアクセス管理 (Identity and access management, IAM) の領域では、認証 (Authentication) はアイデンティティの所有権を確認することであり、個人やエンティティを識別することではありません。例えば、家族の誰かがあなたの資格情報を使ってあなたのアカウントにサインインする場合、システムにとってのアイデンティティは同じですが、彼らはあなたではありません。
- アイデンティティはユーザー、サービス、デバイスのいずれかであり得ます。例えば、サービスが API キーを使用して他のサービスに対して自らの認証を行う場合があります。
認証 (Authentication) と認可 (Authorization) の違い
これらの2つの用語はしばしば混同されますが、根本的に異なります: 認可 (Authorization) は「何ができるか?」という質問に答えます。さらに、システムがどの行動を実行できるかを決定する前にアイデンティティを知る必要があるため、認証 (Authentication) は認可 (Authorization) の前提条件です。
認証要素
認証 (Authentication) は一つ以上の要素を使用して実行されます。以下は一般的な要素です:
- 知識要素: 知っていること(例: パスワード、PIN)
- 所有要素: 持っているもの(例: スマートフォン、セキュリティトークン)
- 本質要素: あなた自身であること(例: 指紋、顔認証)
マルチファクター認証 (Multi-factor authentication, MFA) はセキュリティを高めるために複数の要素を組み合わせる一般的な手法です。例えば、銀行のアカウントにサインインする際には、パスワード(知識要素)と認証アプリからのワンタイムコード(所有要素)を提供する必要があるかもしれません。
パスキー (Passkey) は複数の要素を組み合わせることができ、フィッシング攻撃に対して耐性がある現代の認証要素です。
認証フレームワーク(プロトコル)
独自の認証システムを構築する代わりに、既存のフレームワークやプロトコルを使用することをお勧めします。これらはセキュリティの専門家によって実績とレビュー済みです。認証がどのように実行されるべきかを定義するさまざまな認証フレームワークとプロトコルがあります。一般的なものは以下です:
- OpenID Connect (OIDC) : OAuth 2.0 上に構築された認証機能を追加するアイデンティティレイヤー。比較的新しく、広く使用されています。
- セキュリティアサーションマークアップ言語 (Security Assertion Markup Language, SAML) : 認証 (Authentication) と認可 (Authorization) データを当事者間で交換するためのプロトコル。企業環境で一般的に使用されます。
フレームワークの選択は、使用ケースや要件によります。新しいアプリケーションにはそのモダンな設計と JSON Web Token (JWT) のサポートから OIDC が推奨されます。
しかし、これらのプロトコルを直接扱うことは、依然として複雑で時間のかかる作業です。両方のプロトコルには急勾配の学習曲線があり、セキュリティを確保するために慎重な実装が必要です。代わりに、これらのプロトコルをサポートまたは基に構築された アイデンティティプロバイダー (Identity provider, IdP) を使用すると、認証プロセスを大幅に簡素化できます。優れたアイデンティティプロバイダーは、将来のニーズのために マルチファクター認証 (Multi-factor authentication, MFA) や シングルサインオン (Single sign-on, SSO) などの追加機能も提供します。