Basic認証とは


HTTPプロトコルで規定されている、認証方式で、多くのサーバー、webブラウザが対応している。
ログイン画面や認証機能を作りこむ必要がなく、手軽に利用できる反面、セキュリティ面、機能面で物足りない点もある。

特徴

■ログイン画面を作る必要がない。

ユーザー名とパスワードを入力する画面は、クライアント(ブラウザ)に実装されているため、ログイン画面を作る必要がなく、簡単なサーバーの設定だけで利用可能です。
※独自のログイン画面が必要な場合は、Basic認証ではなく、サーバーやフレームワークが提供するセッション機能を活用して認証機能を作成します。


■ログアウト機能がない。

  • Basic認証にはログアウト機能はない、ログアウトするにはブラウザを閉じるしかない。

一般的に、Basic認証はこのように言われています。
実は、この言葉には裏がありまして、本来のBasic認証の姿としては
  • そもそもログインという機能がない。
  • 通信のたびに、毎回ユーザー名とパスワードで認証する。
これが、Basic認証の本来の姿ですが、実際に毎回ユーザー名とパスワードを要求されたら、人間が使うにはとてもとても大変で誰も使いたがりません。

そこで、大抵のブラウザには、認証が成功した時のユーザー名とパスワードを覚えて置いて、次の通信からは自動的に送信する仕組みが備わっているのです。
この仕組みのおかげで、Basic認証のかかっているサイトも便利に利用出来るのですが、
反面、あくまでブラウザの便利機能なので、サーバからは一切コントロールが出来ないのです。

「ログアウト機能がない」のまとめ

  • Basic認証は本来ならば毎回ユーザーとパスワードを入力する仕組み。
  • それでは不便なのでブラウザが代わりに送信してくれる。
  • ブラウザの機能なのでサーバーからは手出し出来ない。
  • そのため、「Basic認証にはログアウト機能がない」と言われている。


セキュリティ面の特徴

■ユーザー名とパスワードは暗号化されない。

Basic認証では、ユーザー名とパスワードはBASE64という方式でエンコードして送信されます。
BASE64は暗号ではないので、ユーザー名とパスワードはほぼ丸腰でネットワークに流れてしまいます。

■盗聴される可能性が高い。

「ログイン機能がない」でも説明しましたが、Basic認証ではWebサイトにアクセスするたびに、ユーザー名とパスワードを送信しています。
「毎回平文で」ユーザー名とパスワードをネットワーク上に流してしまうので、盗聴の危険性は当然高くなってしまいます。

■安全に使うには

Basic認証を安全に利用するには以下の方法が考えられます。

消極的な対策

  • 重要な情報を置かない
  • 社内ネットワーク等安全なネットワークで利用する

積極的な対策

  • SSLを利用する
SSLは通信を暗号化する技術なので、SSLを利用すればBasic認証に暗号化の機能がなくても、通信内容を暗号化して安全を確保出来ます。
TomcatはSSL通信の時だけBasic認証を有効にするオプションがあるので、合わせて設定するとより安全に利用できるでしょう。

  • Digest認証を利用する
Digest認証は、Basic認証にユーザー名とパスワード※を暗号化する機能を追加した認証方式です。
Basic認証の後に作られたため、古いブラウザやサーバ製品では対応していない事もあります。

※正確には暗号化ではなく、ユーザー名、パスワードとランダムな文字列から計算したハッシュを送信します。
ランダムな文字列を加えて計算したハッシュから元のパスワードに戻すのはほぼ不可能なので十分に安全な認証方式と言えます。