ASP.NETで特定ページにだけ、アクセス制限を設ける

ASP.NET のフォーム認証という機構を用いて、特定のパスだけユーザー認証が必要なようにします。

それには、web.config を次のように編集します。
<configuration>
    <system.web>
        <!- 他の要素は省略... -->
  
          <!-- フォーム認証を指定(アプリに1つだけ) -->
        <authentication mode="Forms"> 
            <forms name="logincookie" 
                loginUrl="manage/login.aspx" 
                protection="All" timeout="30" />
        </authentication>
    
          <!-- サイト全体のアクセス許可(匿名可) -->
        <authorization>
            <allow users="*" />
        </authorization>

        <!- 他の要素は省略... -->
    </system.web>
 
      <!-- 特定パスのアクセス許可(匿名不可) -->
    <location path="manage">
        <system.web>
            <authorization>
                <deny users="?" />
            </authorization>
        </system.web>
    </location>
</configuration>

それで、manage フォルダに login.aspx というログイン専用フォームを作って、そこでユーザ名、パスワードの入力を受け付けます。

ユーザが manage フォルダ内のどんなリソースにアクセスするときも、最初にこの login.aspx にリダイレクトされます。

ログインボタンのイベントハンドラで、ユーザの確認をします。
このユーザ名やパスワードが正しいかどうかを判断するのは、アプリケーション側の責任です。
固定のユーザ名、パスワードでしたら、単純に文字列と比較してもいいでしょうし、多数のユーザを管理する場合は、データベースを使うことになるでしょう。

ユーザーの認証が完了して、OKとなったら、次のコードで、求めているパスにリダイレクトします。
System.Web.Security.FormsAuthentication.RedirectFromLoginPage(UserName.Text, true);


その後は、設定したタイムアウトの時間内であれば、manageフォルダ内のリソースにアクセスできるようになります。

この方法では、ネットワーク上を流れるユーザ名やパスワードは暗号化されずに、平文で流れますので、注意が必要です。
重要なパスワードなどは、しっかりと暗号化した方が安全です。
個人ページなどでは、これでOKだとは思いますが。

クライアント側で暗号化するには、SSLを使ったり、JAVAアプレットを使ったりする方法があります。
[PR]
by isoq | 2005-10-10 10:53 | Web
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇
<< error C2872: あい... 運動会は無事終了、、、でも、、、 >>