Basic認証とは
Basic認証(ベーシック認証)とは、HTTPで定義される認証方式の一つです。IDとパスワードをBase64でエンコードして送信する為、盗聴すれば簡単にIDとパスワードが分かってしまう欠点があります。
Basic認証は実装が容易で、ほぼ全てのWebサーバおよびブラウザで対応している事もあり、簡易的な認証として広く使われています。
しかしBasic認証にはログアウト機能がありません。Basic認証はブラウザに認証状態が残る為、2度目以降のアクセスはログインIDとパスワードは聞かれません。認証状態を削除する為には、ブラウザを終了する必要があります。そのためセッションを管理しログアウト機能を実装しているWebアプリケーションなどはForm認証を使用している事が多いです。
スポンサーリンク
またBasic認証の問題点である平文でパスワードを送信してしまう問題は、SSL(HTTPS)を使用すれば解消されます。なぜならSSL/TLSプロトコルを利用した場合、暗号化通信が行われるからです。
Digest認証とは
Digest認証(ダイジェスト認証)とは、HTTPで定義される認証方式の一つです。Basic認証の平文でパスワードを送信する欠点を改善した認証方式で、IDとパスワードをハッシュ化して送信します。
Digest認証はサーバが生成したランダムの文字列をパスワードに付与し、IDとパスワードをMD5でハッシュ化し送信します。そのため盗聴されてもパスワードの解析が困難となります。
しかしMD5はIPAが2008年7月に発表した調査結果(下記URL参照)にある通り、解析することが可能な古いハッシュアルゴリズムです。
またSSL(HTTPS)を使用すればBasic認証の平文でパスワードを送信する欠点を改善できるため、Digest認証は、HTTPS通信が出来ない環境で使われるHTTP認証方式だと言えます。
Form認証とは
Form認証とはHTMLで作られたフォーム画面からIDとパスワードを送信する認証方式です。IDとパスワードは平文で送信されるので、SSL(HTTPS)を使用して暗号化通信するのが一般的です。
Form認証は、Basic認証やDigest認証と違いhttpの仕様(RFC2617)にはない認証方式です。そのためアプリ側で実装する必要があります。
手順はシンプルでHTMLのフォーム画面より入力されたIDとパスワードをサーバに送信します。サーバはIDとパスワードが正しいかを検証し、正しければセッション管理を開始し、ブラウザにセッションIDを返却します。ブラウザは返却されたセッションIDが有効な期間、ログインしたWebページを閲覧することが出来る仕組です。
パスワードは漏洩しても大きな問題にならないように、データベースにハッシュ化した値で保存しておきます。(※詳しくは下記の記事の通り)
パスワードを安全に保管する方法 | 暗号化とハッシュ化の違い
続きを見る
またBasic認証との大きな違いは「ログアウト」機能と「シングルサインオン」機能が実装できる点です。
スポンサーリンク
ログアウト機能
Basic認証では、認証状態を削除する為にはブラウザを閉じる必要がありました。しかしForm認証ではブラウザを閉じなくても「ログアウト」ボタンなどで認証状況を削除することが出来ます。
Form認証はセッション管理をしているので、ログアウト操作などによりセッション情報をクリアすることで、認証状態も削除する事ができます。
シングルサインオン機能
シングルサインオンとは1つのIDとパスワードを入力して、複数のWebサービスやアプリケーションにログインできる仕組みのことを言います。
IDやパスワードの管理をGoogleやTwitter、Facebookなどの信頼できる会社が管理することにより、セキュリティを強化し、また使用者が複数のIDやパスワードを管理する必要が無くなるメリットがあります。ただしIDやパスワードが漏洩すると大問題になる可能性があるという懸念もあります。
最近のアプリやWebサイトではよく使われている機能で、下記のようなログイン画面を見た事がある人は多いと思います。
[ シングルサインオン イメージ ]
Basic認証は、HTTP通信認証方式でありサーバのファイルディレクトリに対して制限をかけます。そのためBasic認証されたユーザーはそのサーバのドメイン内でしか認証状態が保持できないのです。
シングルサインオンを実装するには異なるドメイン間でのアクセスが必要です。Form認証であれば、HTTP通信の認証方式ではなく、あくまでも リクエストパラメータ、または cookie情報を使用し認証を行う為、ドメイン間でのアクセス制限はなくシングルサインオン機能を使用する事が可能です。
終わりに
本記事ではHTTP通信の認証方式である「Basic認証」「Digest認証」「Form認証」の違いについて紹介しました。
一般的なWebアプリケーションであればSSL(HTTPS)を使用したForm認証、安全な社内ネットワーク内などで簡易的な認証の場合はBasic認証、SSL(HTTPS)が使えない環境の場合はDigest認証のような使い分けが考えられます。