<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>開発日誌</title><link>http://192.168.200.16/mikahosi/category/18.aspx</link><description>CMS開発時のメモ、TIPS</description><managingEditor>甕星</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>甕星</dc:creator><title>開発日誌：フォーム認証の保存方法を考える</title><link>http://192.168.200.16/mikahosi/archive/2005/01/10/327.aspx</link><pubDate>Mon, 10 Jan 2005 12:36:00 GMT</pubDate><guid>http://192.168.200.16/mikahosi/archive/2005/01/10/327.aspx</guid><wfw:comment>http://192.168.200.16/mikahosi/comments/327.aspx</wfw:comment><comments>http://192.168.200.16/mikahosi/archive/2005/01/10/327.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://192.168.200.16/mikahosi/comments/commentRss/327.aspx</wfw:commentRss><trackback:ping>http://192.168.200.16/mikahosi/services/trackbacks/327.aspx</trackback:ping><description>&lt;p&gt;
フォーム認証を使うためには、認証処理を自前で用意しなくてはなりません。内部でAPIを呼び出しWindowsのユーザー管理機能を使って認証を行う方法もあります。ですが、レンタルサーバーで任意にユーザーを登録できるわけではないので、この方法は候補から外しましょう。データベース上に独自にユーザ情報を保存して、自前の処理で認証を行うことにします。
&lt;p&gt;&lt;/p&gt;
ユーザー情報として最低限ユーザーIDとパスワードを保存することになります。この時パスワードを保存する方法には２種類が考えられます。一つは平分のまま格納する方法、もう一つは片方向ハッシュを用いて暗号化を施す方法です。
&lt;p&gt;&lt;/p&gt;
パスワードを平文でそのまま格納した場合、データベースを他者に見られた場合にパスワードが漏洩朗詠してしまいます。
パスワードを忘却した場合いは、データベースに格納されている元のパスワードを通知すれば良いでしょう。ただしこの時、パスワードの通知が行われたことを確実にユーザーに伝える工夫を考えたほうが良いでしょう。さもなければ、誰かが不正にパスワードを取得したとしても、利用者は気がつかないままになってしまいます。
チャレンジレスポンス方式の認証を行う場合には、平分でパスワードを保持しておく必要があります。フォーム認証でもJavaScriptを活用してチャレンジレスポンス認証を行うことは可能ですが、今回そこまでする心算はありません。となるとデメリットしかないので、パスワードを平分で格納するのは止めた方が良いでしょう。
&lt;p&gt;&lt;/p&gt;
片方向ハッシュで暗号化を施した場合、例えデータの内容を他者に見られてもパスワードが漏洩する事はありません。今回はレンタルサーバーなので、他者の目に触れてしまうリスクは、自分でサーバーを管理しているときよりも高いと言えるでしょう。パスワードを暗号化しておくのは重要です。
もちろん管理者にも元のパスワードを知る術はありません。したがってパスワードを忘却した場合にはこちらで適当に再設定したパスワードを相手に安全な方法で送付することになります。この場合パスワードは必ず変わってしまい、元のパスワードではログインできなくなります。誰かが不正にパスワードを入手した場合、本来のユーザーは利用できなくなることですぐに事実に気がつくことができます。
&lt;p&gt;&lt;/p&gt;
今回のところは片方向ハッシュで暗号化して保存する方向で作ろうと思います。幸いな事に片方向ハッシュアルゴリズムの一つMD5は、標準の機能として.Net Frameworkで提供されています。今回はそれを使って暗号化するよにしましょう。
&lt;/p&gt;&lt;img src ="http://192.168.200.16/mikahosi/aggbug/327.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>甕星</dc:creator><title>認証方法を選択する</title><link>http://192.168.200.16/mikahosi/archive/2005/01/10/326.aspx</link><pubDate>Mon, 10 Jan 2005 01:33:00 GMT</pubDate><guid>http://192.168.200.16/mikahosi/archive/2005/01/10/326.aspx</guid><wfw:comment>http://192.168.200.16/mikahosi/comments/326.aspx</wfw:comment><comments>http://192.168.200.16/mikahosi/archive/2005/01/10/326.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://192.168.200.16/mikahosi/comments/commentRss/326.aspx</wfw:commentRss><trackback:ping>http://192.168.200.16/mikahosi/services/trackbacks/326.aspx</trackback:ping><description>&lt;p&gt;
せっかくサーバーを借りたので、やっぱり練習がてらCMSを作ってみることにしました。CMSを作るためには、やっぱりユーザー認証の機能は外せませんよね。IIS+ASP.NETで利用できるユーザー認証方法は以下の5つに分けることが出来ます。
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;基本認証&lt;/strong&gt;&lt;br&gt;
HTTP1.0で既定されているユーザー認証方法。もっとも簡単確実な方法のはず、でもあまり使っているのは見かけない。&lt;br&gt;
利点：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;ほぼ全てのWEBブラウザが広く対応している。&lt;br&gt;
&lt;li&gt;Windowsのユーザー管理機能と連携した、きめ細かなアクセス制御が可能。&lt;br&gt;
&lt;/ul&gt;
欠点：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;ユーザーIDとパスワードは平分で送受信される。&lt;br&gt;
&lt;li&gt;各ユーザーのWindowsアカウントを作成する必要がある。&lt;br&gt;
&lt;/ul&gt;
&lt;strong&gt;ダイジェスト認証&lt;/strong&gt;&lt;br&gt;
チャレンジレスポンス方式で、パスワードを暗号化して認証を行います。実際に使っているのは見たこと無いです。&lt;br&gt;
利点：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;パスワードは暗号化して送受信される。&lt;br&gt;
&lt;/ul&gt;
欠点：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;HTTPでは既定されていないため、対応ブラウザが限定される。InternetExplorer5.0以上。&lt;br&gt;
&lt;li&gt;パスワードをクリアテキストで保存する必要があります。&lt;br&gt;
&lt;li&gt;ダイジェスト認証用に設定された Active Directory サーバーが必要。&lt;br&gt;
&lt;/ul&gt;
&lt;strong&gt;統合Windows認証&lt;/strong&gt;&lt;br&gt;
WindowsNTの認証機能であるNTLMやKerberosV5による認証を行います。Windowsとの親和性が高い、逆に言えばいんどｗｓ以外では使えない。&lt;br&gt;
利点：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;Windowsのユーザー管理機能と連携した、きめ細かなアクセス制御が可能。&lt;br&gt;
&lt;li&gt;パスワードは暗号化して送受信される。&lt;br&gt;
&lt;/ul&gt;
欠点：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;HTTPでは既定されていないため、対応ブラウザが限定される。InternetExplorer5.0以上。&lt;br&gt;
&lt;li&gt;各ユーザーのWindowsアカウントを作成する必要がある。&lt;br&gt;
&lt;li&gt;プロキシーサーバーを利用することが出来ない。&lt;br&gt;
&lt;/ul&gt;
&lt;strong&gt;クライアント証明書マップ&lt;/strong&gt;&lt;br&gt;
電子証明書を利用した認証方法。銀行業務や、企業間取引など強力なユーザー認証機能が必要なときに用いられている。
利点：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;証明期間の電子証明書を使った電子署名を利用するため偽装は困難です。&lt;br&gt;
&lt;/ul&gt;
欠点：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;利用するためには証明機関から各ユーザー用の電子証明を取得する必要があります。結構高い。&lt;br&gt;
&lt;li&gt;クライアント側で電子証明書を利用するための設定が必要です。&lt;br&gt;
&lt;li&gt;対応していないブラウザもあるらしいです。&lt;br&gt;
&lt;/ul&gt;
&lt;strong&gt;フォーム認証&lt;/strong&gt;&lt;br&gt;
認証処理をASP.NETのアプリケーションとして独自に実装します。自由度が高く互換性の問題も少ないので、広く使われている様子。セキュリティ面は実装次第。&lt;br&gt;
利点：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;独自のCGIによって実現するので、実装はプログラマ次第です。&lt;br&gt;
&lt;/ul&gt;
欠点：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;独自のCGIによって実現するので、実装はプログラマ次第です。&lt;br&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
さてどの認証方法を採用しましょうか？私はブラウザを限定したくないので、Windows認証やダイジェスト認証は候補から外します。レンタルサーバーで運用するつもりですので、Windowsアカウントを自由に作成するわけにはいきません。基本認証も駄目です。私には潤沢な予算がありません。したがってクライアント証明書を購入しなくてはならなくなるクライアント証明書マップも候補から外れます。唯一残ったフォーム認証を利用して作ることになりそうです。
&lt;/p&gt;
&lt;p&gt;
世間ではフォーム認証を利用したWEBアプリケーションが大多数ですが、伊達や酔狂でフォーム認証を利用しているわけではないのですね。
&lt;/p&gt;&lt;img src ="http://192.168.200.16/mikahosi/aggbug/326.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>