[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]] -[[戻る>ASP.NET]] * 目次 [#j2f5dc70] #contents *概要 [#c361fa3a] Forms認証とは、Formにユーザアカウント情報を入力してWeb/APサーバで認証をする認証方式の呼称である。 ASP.NET Forms認証は、ASP.NETでForms認証を実装するための認証基盤機能である。 僅か、下記の実装のみで暗号化されたCookie認証チケットを使用した認証基盤機能を利用できるため、ASP.NETアプリケーションの認証基盤として利用される機会が多い。 **web.config上の設定 [#g2cf44db] 図 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属性)に記述する。 **ログイン画面と認証ロジック [#o6ed7c82] ***ログイン画面 [#x86ae883] #ref(LoginScreen(aspx).png,left,nowrap,ログイン画面(*.aspx)) ***認証ロジック(C#の場合) [#h4cb8c7e] 認証ロジック(コードビハインド) 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); } *クロスサイト設定 [#ec5ec34c] **1 つのサーバ上 or Web ファーム内のアプリケーション間 [#rb61bcf7] machine keyと認証チケットのcookie名を同じにする。 -Web ファームの認証のベスト プラクティス~ https://msdn.microsoft.com/ja-jp/library/cc419744.aspx -アプリケーション間のフォーム認証~ https://msdn.microsoft.com/ja-jp/library/eb0zx8fc.aspx **同一ドメインのサイト間での利用 [#se3beab8] 上記に加え、enableCrossAppRedirects要素をtrueに設定することで、~ ASP.NET2.0からWebサイト間のシングル サイン オンも可能になった。 -MSDNライブラリ > .NET Frameworkの全般リファレンス > authenticationのforms要素(ASP.NET設定スキーマ)~ http://msdn.microsoft.com/ja-jp/library/1d3t3c61.aspx -Sharing Authentication Cookie between two ASP.NET Applications - CodeProject~ http://www.codeproject.com/Tips/438319/Sharing-Authentication-Cookie-between-two-ASP-NET *ASP.NET Mobile Web(携帯端末) [#ubca4e31] なお、ASP.NET Mobile Web(携帯端末)の場合、端末によっては、~ Cookieをサポートしていないケースがあるため、Forms認証の認証チケット(Cookie)の持ち回り方法が異なる。 web.configのformsタグの定義を次のように、cookieless="UseUri"と記述する。 <forms name="formauth" ~ cookieless="UseUri"/> この場合、下記に示す様に、ASP.NET Mobile Webにより、URLにForms認証の認証チケット(Cookie)が埋め込まれる。~ http://[FQDN名]/[アプリケーション名]/S(SessionID)F(Forms認証の暗号化された認証チケット)/xxx.aspx ASP.NET Mobile Web では、URLに埋め込まれたForms認証の認証チケット(Cookie)などの情報を上手く引き継ぐために、~ 画面遷移の際は、MobilePage.RedirectToMobilePage メソッドを使用する必要がある。 *コンテンツごとの制御 [#lc5db7f2] **静的コンテンツへの適用 [#za9ab06e] また、Forms認証はASP.NETの認証基盤機能であるため、動的コンテンツ(aspx)以外に利用できないと思われがちだが、下記のような設定によって静的コンテンツにも適用できるようになる 。 -@IT > .NET TIPS > [ASP.NET].htmlや.pdfファイルをフォーム認証やロギングの対象にするには?~ http://www.atmarkit.co.jp/fdotnet/dotnettips/114iisrelate/iisrelate.html ただし、IIS6.0では、web.configファイルに以下の例に従った記述が必要になる。 <httpHandlers> <add verb="*" path="*.pdf" type="System.Web.StaticFileHandler" /> <add verb="*" path="*.html" type="System.Web.StaticFileHandler" /> </httpHandlers> ※ 拡張子ごとに、addタグを追加する。 -MSDNライブラリ > .NET Frameworkの全般リファレンス > httpHandlers要素 (ASP.NET設定スキーマ)~ http://msdn.microsoft.com/ja-jp/library/bya7fh0a.aspx **一部コンテンツを認証対象外に設定する。 [#be337e83] 以下の設定で認証対象外に設定できる(フォルダやファイル単位で指定できる)。 <!-- 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> -location 要素 (ASP.NET 設定スキーマ)~ https://msdn.microsoft.com/ja-jp/library/b6x6shw7.aspx