仕事で認証について教える機会があったのですが、あまり認証のことを理解していないと感じたので、調べてみることにしました。調べてみるとあまり全体的にまとまったサイトがないですね…。書き足しながら完成度を高めて行こうと思います。
いろいろページを調べながら、しっくりきた解釈を記載します。。
「認証」という用語は情報セキュリティ上二つの意味を持っています。ひとつはAuthentication(2者間認証)、もうひとつはCertification(3者間認証)です。図に表わすと次のようなイメージになります。
認証の種類
<Authentication(2者間認証)>
認証者と被認証者が事前に共有している情報を確認すること。ユーザIDとパスワードによるログインなど。
<Certification(3者間認証)>
認証局が発行した証明書により持ち主の正当性を確認すること。
Webアプリの認証方式
<Basic認証(Authentication)/Digest認証(Authentication)>
既にたくさんの記事があるので、引用していきたいと思います。まずは、基本情報やHTML5認定試験に出てきそうな言葉の定義は、次のとおりです。
Basic認証とは、HTTPで定義される認証方式の一つ。基本認証と呼ばれることも。Basic認証では、ユーザ名とパスワードの組みをコロン “:” でつなぎ、Base64でエンコードして送信する。このため、盗聴や改竄が簡単であるという欠点を持つが、ほぼ全てのWebサーバおよびブラウザで対応しているため、広く使われている。
盗聴や改竄を防ぐため、後にDigest認証というユーザ名とパスワードをMD5でハッシュ化して送る方法が考えられた。
(by wikipedia)
どういう通信をして認証をしているかは、次のサイトがわかりやすかったです。
- クライアントからHTTPのリクエストを送信します。
- ベーシック認証を行うWebサーバは、クライアントからのリクエストにAuthorizasionヘッダが 指定されていないか確認します。 Authorizasionヘッダが指定されていない場合、サーバは、「WWW-Authenticate」ヘッダを レスポンスヘッダに指定してレスポンスコード401で送信します。
- クライアントは、「WWW-Authenticate」ヘッダを受け取ると認証用の入力を要求します。 入力されたユーザー名とパスワードを「Authorization」ヘッダにセットしサーバへ送信します。
- サーバは、「Authorization」ヘッダに指定されているユーザー名とパスワードを使用して認証処理をします。 認証に成功すれば、要求のあったページを送信します。認証に失敗すると 2. のの送信を実行します。
(by http://www.bnote.net/linux/basicauth.shtml)
特記事項としては、Basic認証の情報は、HTTP認証のため、ブラウザに記憶されます。(ブラウザを閉じるまで、ユーザ名とパスワードの入力が不要)また、HTTP通信の認証方式でサーバーのファイルディレクトリに対して制限をかけため、そのサーバーのドメイン内でしか効力がない。明示的なログアウト処理が不要。
私、Basic認証をあまり知らなかったんですが、Basic認証を使わない理由としては、次のサイトにうまくまとまっていました。
- ログアウト機能がないこと
- ログインせずに同じページのコンテンツを閲覧するという使い方(ゲストアクセス)ができないこと
- サーバ側からログイン状態を無効にする手段が存在しないこと
- ホストをまたがったシングルサインオンが実現できないこと
(by http://d.hatena.ne.jp/IwamotoTakashi/20081108/p1)
最後にBasic認証についてよくまとめられているサイトをご紹介します。(このサイトをみたら、自前で書くのを諦めました(笑))
<Form認証>
私は、WEBアプリ開発を長年やっているので、Basic認証よりForm認証の方がお馴染みの方式です。Form認証は、HTMLのフォームタグから認証する方式です。HTMLのソースは次のとおりです。
<form action=”www.formAuthentication.com” method=”post”>
<input type=”text” name=”txtId”>
<input type=”password” name=”txtPassword”>
<input type=”submit” value=”ログイン”>
</form>
Form認証もBasic認証もログインする際のユーザの見た目はあまり変わりませんが、裏の仕組みが異なります。HTTPプロトコルの認証の仕組みを使わずに認証をします。Webアプリケーションの場合は、セッション情報に格納してサーバ側でその情報を管理します。セッションにログイン情報を保持した場合は、サーバと通信が必要になる都度(画面遷移やボタン操作等)に認証情報を確認します。タイムアウトやログアウト処理が行われるまで、永続的にログインした状態になります。
一昔前では、Form認証でもログインに成功したという情報をブラウザのクッキーに保存する方式もあるようです。(個人的には好きではない)
仕事以外で絵を描いたので、時間がかかりすぎました(^^;) 今後、次の認証についてまとめてみたいと思います。観点はWebアプリケーションの認証方法です。
- SAML
- OpenID
- 証明書認証
- シングルサインオン
- 多要素認証
今日はここまで。
コメント
いい情報をありがとうございます!!