ベーシック認証

OYPosted by

Redisネタを挙げるつもりで余裕ぶっこいてたら、すでにほかの方が取り上げていました。重複で突然ネタ切れを起こさないようになんか引き延ばしやすいネタが欲しいですよね。

というわけでしばらくは、いっぱい種類があって、話が盛りやすく、一種類ずつ挙げていけば結構長持ちしそうな認証周りをネタにしていこうかなと。

では早速ですが、認証コーナー第一段、ベーシック認証について解説していきます。

ベーシック認証は「Basic(基本)」と名の付くように非常に簡易的な認証方法です。

まずクライアントはサーバー側に認証情報などが含まれないリクエストを投げます(この時点ではそのサーバが認証情報を要求するかどうか不明なため)。
するとサーバーはクライアントに対して401を返し、ユーザ名とパスワードを要求します。このときBasic認証を用いることをAuthenticateヘッダで伝えます。

WWW-Authenticate: Basic realm=認証領域(ドメイン名など)

それを受け取ったクライアントは認証情報の入力画面を提供し、ユーザが入力したユーザ名とパスワードをサーバへ送信します。

(例)UserName: YamadaTaro、Password: yamada123

このときクライアントが投げるHTTPの認証ヘッダは次のようになる。

Authorization: Basic WWFtYWRhVGFybzp5YW1hZGExMjM=

はて、ユーザ名とパスワードはいずこや?

実はどちらもWWFtYWRhVGFybzp5YW1hZGExMjM=という文字列に含まれています。この不可解な文字列こそがベーシック認証の肝です。

この文字列はユーザ名とパスワードをコロンで区切った文字列にBase64を掛けることで生成可能です。Base64がなんなのかについては流石に話が膨れすぎるので省略します。

サーバ側ではあらかじめBase64(UserName:Password)を保管しておいて対象カラムをフルスキャンするなりすれば答え合わせが可能です。

すごい!パスワードとユーザ名を見事隠してサーバに伝えている!安全!!

・・・

ではなく残念ながらBase64をデコードすれば丸裸も同然なので安全性は皆無です。

しかし、安全が保証しやすい社内ネットワークなどの範囲で利用する分には問題ないでしょう。実装がとても簡単なのは大きなメリットですので使えるところをしっかり選び使っていきましょう。

次回はダイジェスト認証について解説します。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA