Open棟梁Project - マイクロソフト系技術情報 Wiki
Forms認証とは、Formにユーザアカウント情報を入力してWeb/APサーバで認証をする認証方式の呼称である。
ASP.NET Forms認証は、ASP.NETでForms認証を実装するための認証基盤機能である。
僅か、下記の実装のみで暗号化されたCookie認証チケットを使用した認証基盤機能を利用できるため、ASP.NETアプリケーションの認証基盤として利用される機会が非常に多い。
図 web.configの設定
<authentication mode="Forms">
<forms name="formauth"
loginUrl="(ログイン画面のURL)"
defaultUrl="(メニュー画面のURL)"
protection="All"
timeout="60"
path="/"
requireSSL="false"
slidingExpiration="true"
enableCrossAppRedirects="false"
cookieless="UseDeviceProfile" domain="">
</forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
web.config(authenticationタグのtimeout属性)に記述する。
認証ロジック(コードビハインド)
protected void Button1_Click(object sender, EventArgs e)
{
// ユーザ名、パスワードを取得。
string userName = this.TextBox1.Text
string passWord = this.TextBox2.Text
// 任意の認証ロジック(userName、passWordからユーザを認証する)。
// 認証か完了した場合、認証チケットを生成し、元のページにRedirectする。
// 第2引数は、クライアントがCookieを永続化(ファイルとして保存)するかどうか。
// を設定する引数であるが、セキュリティを考慮して、falseの設定を勧める。
FormsAuthentication.RedirectFromLoginPage(userName, false);
}
ASP.NET Forms認証は、ASP.NET1.xでは、単一Webサイト内でのみ利用可能であったが、ASP.NET2.0から複数のWebサイト間で「Cookie認証チケット」を共有する仕組みが用意された。これにより、Webサイト間のシングル サイン オンも可能になった。
複数のWebサイト間でForms認証の「Cookie認証チケット」を共有するには、.NETの設定にあるenableCrossAppRedirects?要素をtrueに設定する(ただし、Forms認証の「Cookie認証チケット」を共有する範囲は同一ドメインである必要がある)。
また、Forms認証はASP.NETの認証基盤機能であるため、動的コンテンツ(aspx)以外に利用できないと思われがちだが、下記のような設定によって静的コンテンツにも適用できるようになる 。
ただし、IIS6.0では、web.configファイルに以下の例に従った記述が必要になる。
<httpHandlers> <add verb="*" path="*.pdf" type="System.Web.StaticFileHandler" /> <add verb="*" path="*.html" type="System.Web.StaticFileHandler" /> </httpHandlers>
※ 拡張子ごとに、addタグを追加する。
以下の設定で認証対象外に設定できる(フォルダやファイル単位で指定できる)。
<!-- Framework ファイルを認証対象外にする -->
<location path="Framework/Img">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="Framework/Js">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="common">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>