Table of Contents
Webサービスを提供する場合、その用途にあった適切な認証方式を採用する必要があります。
今回は、Basic認証について紹介します。
Basic認証の概要
もっとも古くから使われており、対応している環境も広い方式のようです。
反面、安全面では心配な点があると言われています。
WebサーバがWebブラウザなどからアクセスの制限された領域への送信要求(HTTPリクエスト)を受信すると、エラーコード401(Authorization Required)を返信し、利用者のID(ユーザ名)とパスワードの送信を要求する。ブラウザは利用者に認証情報の入力を求め、これをWebサーバに送り、サーバ側に保存された情報と照合してアクセスを許諾あるいは拒否する。
ブラウザから送信される認証情報は「ユーザ名:パスワード」という形式で「:」(コロン)で区切って並べ、これをBASE64でエンコーディングした文字列をHTTPヘッダのAuthorizationフィールドに記載する。
最も簡易で基本的な方式であり、古くから用いられている方式であるためほとんどのWebサーバやWebクライアントが対応しているが、認証情報が平文(クリアテキスト)のまま送られ暗号化やハッシュ化などはされないため、通信途上で第三者に覗き見られる危険性がある。
BASIC認証とは|基本認証|ベーシック認証|HTTP基本認証|basic authentication – 意味/定義 : IT用語辞典
Basic認証(ベーシックにんしょう、Basic Authentication)とは、HTTPで定義される認証方式の一つ。基本認証と呼ばれることも。
Basic認証では、ユーザ名とパスワードの組みをコロン “:” でつなぎ、Base64でエンコードして送信する。このため、盗聴や改竄が簡単であるという欠点を持つが、ほぼ全てのWebサーバおよびブラウザで対応しているため、広く使われている。
Basic認証を設定する方法
Basic認証を設定したいディレクトリに .htaccess を作成し、その中身を次のようにします。
AuthUserFile /home/***/.htpasswd AuthName "入力を促すメッセージをここに入力" AuthType Basic require valid-user
AuthUserFile とは、ユーザ認証のためのユーザ名とパスワードを格納したテキストファイルのことで、このファイルは、一般的に .htpasswd と命名されます。これを AuthUserFile の後に絶対パスで指定します。
.htpasswd には「ユーザ名」と「パスワードをエンコードした文字列」をコロン(:)でつないで一つの組みとして記載します。
例えば、ユーザ名が joyplot で、パスワードが password のとき、以下のように書き込みます。
joyplot:$apr1$OCOTTuB0$ScKUccKdBXPDKVOzUrZC2.
コロンの後に記載されているのが「パスワードをエンコードした文字列」です。
$apr1$OCOTTuB0$ScKUccKdBXPDKVOzUrZC2.
これを用意するためには、次に紹介する方法で .htpasswd の生成します。
htpasswdコマンド
お使いの環境によっては、htpasswdというコマンドが使えるかもしれません。
筆者の MacBook には、以下のディレクトリに htpasswd の実行ファイルがありました。
/usr/sbin/htpasswd
使い方を表示してみます。
Usage: htpasswd [-cimBdpsDv] [-C cost] passwordfile username htpasswd -b[cmBdpsDv] [-C cost] passwordfile username password htpasswd -n[imBdps] [-C cost] username htpasswd -nb[mBdps] [-C cost] username password -c Create a new file. -n Don't update file; display results on stdout. -b Use the password from the command line rather than prompting for it. -i Read password from stdin without verification (for script usage). -m Force MD5 encryption of the password (default). -B Force bcrypt encryption of the password (very secure). -C Set the computing time used for the bcrypt algorithm (higher is more secure but slower, default: 5, valid: 4 to 31). -d Force CRYPT encryption of the password (8 chars max, insecure). -s Force SHA encryption of the password (insecure). -p Do not encrypt the password (plaintext, insecure). -D Delete the specified user. -v Verify password for the specified user. On other systems than Windows and NetWare the '-p' flag will probably not work. The SHA algorithm does not use a salt and is less secure than the MD5 algorithm.
様々なオプションがありますが、insecure と書かれているものは安全性に疑問があるため使わないほうが無難だと思います。
例えば以下のようなオプションです。
-p: 暗号化せず平文でパスワードを扱います。 -d: これはパスワードが8文字までしか許されず、安全性に欠けます。
デフォルトではMD5による暗号化が行われるので、わざわざこれより安全性の低いオプションを使うことは稀だとは思います。
実際に作る例を示します。ユーザ名を joyplot、パスワードを test とした場合を例にします。
htpasswd -c .htpasswd joyplot
-c は、ファイルが存在しない場合、新規作成してくれるオプションです。
このコマンドを実行すると、入力を促すプロンプトが出されるので、それに従って必要事項を入力していきます。
プロンプトを出さず一気にファイルを生成したい場合は、以下のように -b を付け加え、パスワードを最後に書き加えます。
htpasswd -cb .htpasswd joyplot test
これで .htpasswd が生成されます。
Basic認証のパスワード生成ツール
Web上でも .htpasswd を作ってくれるサービスがあります。
.htpasswd生成 | ベーシック認証用のパスワードを一発作成 | すぐに使える便利なWEBツール | Tech-Unlimited
簡単なグループでの認証にはこれで十分だと思いますが、商用で個人情報を扱うようなサービスに使うには不安があります。