「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-戻る
--[[ASP.NET]]
--[[認証基盤]]

* 目次 [#j2f5dc70]
#contents

*概要 [#c361fa3a]
-Forms認証とは、Formにユーザアカウント情報を入力してWeb/APサーバで認証をする認証方式の呼称である。

-ASP.NET Forms認証は、ASP.NETでForms認証を実装するための、最も基本的な認証基盤機能である。

-[[ASP.NET Identity]]では、非常に沢山のことを覚え、実装を記述する必要があるが、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);
 }

*詳細 [#yd85d9d5]

**クロスサイト設定 [#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

**コンテンツごとの制御 [#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

**クロスサイト、クロスドメイン [#zf3414e4]
ASP.NETのForms認証では、
-クッキー認証チケットをクロスサイトで使用できるが、
-クロスドメインでのクッキー認証チケットの引継は不可能。

という制限を持っている。

クロスドメイン間のサイトで、テンポラリの認証情報をQueryString等で引き継いで、~
連携先サイトで、別途Forms認証のクッキー認証チケットを発行すると言う方式の実績もある。~

しかし、要件に合わないようなら、個別に
-「[[統合認証基盤型>認証基盤#bcd2a481]]」の認証基盤製品の導入
-「[[クレームベース認証>認証基盤#if326ed5]]」のサポート

等を検討した方が良さそうです。

*[[ASP.NET Web Forms]]以外での利用 [#ib1d674f]

**ASP.NET Mobile Web [#ubca4e31]
なお、携帯端末用のASP.NET Mobile Web(既にdiscon)の場合、端末によっては、~
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 メソッドを使用する必要がある。

**[[ASP.NET MVC における 認証>ASP.NET MVCの利用方法#i72e16ec]] [#i0fb5693]

**[[ASP.NET Core における 認証]] [#y634ff92]

----
Tags: [[:.NET開発]], [[:ASP.NET]], [[:ASP.NET Web Forms]], [[:ASP.NET MVC]], [[:認証基盤]], [[:セキュリティ]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS