HTTP認証

読み:えいちてぃーてぃーぴーにんしょう / 英語表記:HTTP authentication

HTTPの要求・応答で、サーバが認証方式を示し、クライアントが認証情報を送る仕組み。Basic方式では、利用者名とパスワードを所定の区切り文字で連結し、Base64で表した値を要求に含める。

イマシルちゃんの解説

HTTP認証は、Webの要求と応答を使って利用者を確かめる仕組みだよ。
保護されたページを開こうとすると、サーバが応答で使える認証方式を知らせるんだ。
ブラウザはその方式に合わせた認証情報を、ページを求める要求に付けて送り直すよ。
代表例のBasic認証では、利用者名とパスワードをBase64という表記方法で変換して送るんだ。
元に戻せる変換なので、HTTPSで通信を保護することが大切だよ。
Digest認証ではパスワードそのものを送らず、サーバから渡された値や要求の内容などと組み合わせて計算した結果で確かめてもらうんだ。

より深い解説

サーバが方式を案内する

一般的には、保護された資源への要求に対してサーバが401の応答を返し、WWW-Authenticateで方式などを提示する。クライアントは対応するAuthorizationを付けて要求する。

フィールド主な方向と意味
WWW-Authenticateサーバから、要求する認証方式などを伝える
Authorizationクライアントから、方式に応じた値を送る

アクセス権限があるかの判断は、本人確認とは別の処理である。認証に成功しても、すべての資源を利用できるとは限らない。

Basic方式の表現

RFC 7617で定義される方式である。利用者名とパスワードの間にコロンを入れ、全体をBase64へ変換する。独自の例として、名前がdemo、パスワードがsampleなら、変換前はdemo:sampleとなる。

Authorization: Basic (変換した文字列)

この変換は暗号化ではなく、元の文字列へ戻せる。通信内容が見える経路では秘密が漏れるため、HTTPSなどで通信路を保護する必要がある。

ハッシュを用いた応答の計算

Digest方式はRFC 7616で定義される。サーバが示したnonceや、利用者の秘密に基づく値、要求のメソッド・URIなどを使い、応答値を計算する。

計算にはハッシュ関数を使う。古い実装で使われたMD5に加え、RFC 7616はSHA-256やSHA-512/256も定義する。サーバはチャレンジのalgorithmパラメータで方式を示す。Base64のような表現の変換と、秘密や要求内容から応答値を求める処理を区別する必要がある。MD5を使えることは、安全な構成として選んでよいことを意味しない。

単に「利用者名:パスワード」をハッシュ化した値を送る方式ではない。要求の情報やサーバから与えられる値を組み込む点が、Basic方式と異なる。

観点BasicDigest
パスワードの扱い可逆な表現に含まれるそれ自体を直接は送らない
サーバが与える値応答計算の材料には使わない計算へ組み込む
古い応答の再利用への備え方式単独では不十分nonceやカウンタなどを利用する

採用するアルゴリズムや設定を確認する必要がある。古い方式名だけで安全性を判断せず、通信路の保護とパスワードの強さも考慮する。

通信路やアプリケーション認証との分担

仕組み目的
TLS通信内容の機密性や改ざんへの対策
HTTP認証HTTPのフィールドを使った本人確認
Cookieによるセッション管理アプリケーションでログイン状態などを維持する

認証方式を使っても、それだけでページ本文まで暗号化されるわけではない。また、プロキシによる認証では、通常のサーバ認証と異なる407応答などを使う。

参考資料

実際の試験ではここに出る!全2問

ネットワークスペシャリスト

午後Ⅰ
午前Ⅱ

この用語が出てくる記事

↑