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

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

* 目次 [#j2f5dc70]
#contents

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

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

僅か、下記の実装のみで暗号化されたCookie認証チケットを使用した認証基盤機能を利用できるため、ASP.NETアプリケーションの認証基盤として利用される機会が多い。
-[[ASP.NET Identity]]では、非常に沢山のことを覚え、実装を記述する必要があるが、Forms認証では、~
僅か、下記の実装のみで暗号化された[[Cookie認証チケット>認証基盤#la8f4c73]]を使用した認証基盤機能を利用できるため、~
ASP.NETアプリケーションの認証基盤として利用される機会が多い。

**web.config上の設定 [#g2cf44db]

図 web.configの設定
**[[Web.config>#nf687ad7]]上の設定 [#g2cf44db]
 <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属性)に記述する。
※ [[Web.config>#nf687ad7]](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]
ASP.NET Forms認証は、ASP.NET1.xでは、単一Webサイト内でのみ利用可能であったが、ASP.NET2.0から複数のWebサイト間で「Cookie認証チケット」を共有する仕組みが用意された。これにより、Webサイト間のシングル サイン オンも可能になった。

複数のWebサイト間でForms認証の「Cookie認証チケット」を共有するには、.NETの設定にあるenableCrossAppRedirects要素をtrueに設定する(ただし、Forms認証の「Cookie認証チケット」を共有する範囲は同一ドメインである必要がある)。
*詳細 [#yd85d9d5]

-MSDNライブラリ > .NET Frameworkの全般リファレンス > authenticationのforms要素(ASP.NET設定スキーマ)~
http://msdn.microsoft.com/ja-jp/library/1d3t3c61.aspx
**クロスサイト設定 [#ec5ec34c]

-Sharing Authentication Cookie between two ASP.NET Applications - CodeProject~
http://www.codeproject.com/Tips/438319/Sharing-Authentication-Cookie-between-two-ASP-NET
***1 つのサーバ上 or Web ファーム内のアプリケーション間 [#rb61bcf7]
machine keyと[[Cookie認証チケット>認証基盤#la8f4c73]]のcookie名を同じにする。

-Web ファームの認証のベスト プラクティス~
https://msdn.microsoft.com/ja-jp/library/cc419744.aspx

-アプリケーション間のフォーム認証~
https://msdn.microsoft.com/ja-jp/library/eb0zx8fc.aspx

*ASP.NET Mobile Web(携帯端末) [#ubca4e31]
なお、ASP.NET Mobile Web(携帯端末)の場合、端末によっては、Cookieをサポートしていないケースがあるため、Forms認証の認証チケット(Cookie)の持ち回り方法が異なる。
***同一ドメインのサイト間での利用 [#se3beab8]
上記に加え、enableCrossAppRedirects要素をtrueに設定することで、~
ASP.NET2.0からWebサイト間のシングル サイン オンも可能になった。

web.configのformsタグの定義を次のように、cookieless="UseUri"と記述する。
-MSDNライブラリ > .NET Frameworkの全般リファレンス > authenticationのforms要素(ASP.NET設定スキーマ)~
http://msdn.microsoft.com/ja-jp/library/1d3t3c61.aspx

 <forms name="formauth" ~ cookieless="UseUri"/>
-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により、URLにForms認証の認証チケット(Cookie)が埋め込まれる。~
**コンテンツごとの制御 [#lc5db7f2]

 http://[FQDN名]/[アプリケーション名]/S(SessionID)F(Forms認証の暗号化された認証チケット)/xxx.aspx
***静的コンテンツへの適用 [#za9ab06e]
また、Forms認証はASP.NETの認証基盤機能であるため、~
動的コンテンツ(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ファイルに以下の例に従った記述が必要になる。
ただし、IIS6.0では、[[Web.config>#nf687ad7]]ファイルに以下の例に従った記述が必要になる。

 <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]
***一部コンテンツを認証対象外に設定する。 [#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]

***クロスサイト [#f78e2582]
ASP.NETのForms認証では、[[Cookie認証チケット>認証基盤#la8f4c73]]をクロスサイトで使用できる。

***クロスドメイン [#pa9838fa]
-しかし、クロスドメインでの[[Cookie認証チケット>認証基盤#la8f4c73]]の引継は不可能という制限を持っている。

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

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

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

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

***ASP.NET Mobile Web [#ubca4e31]
なお、携帯端末用のASP.NET Mobile Web(既にdiscon)の場合、端末によっては、~
Cookieをサポートしていないケースがあるため、Forms認証の[[Cookie認証チケット>認証基盤#la8f4c73]]の持ち回り方法が異なる。

[[Web.config>#nf687ad7]]のformsタグの定義を次のように、cookieless="UseUri"と記述する。

 <forms name="formauth" ~ cookieless="UseUri"/>

この場合、下記に示す様に、ASP.NET Mobile Webにより、URLにForms認証の[[Cookie認証チケット>認証基盤#la8f4c73]]が埋め込まれる。~

 http://[FQDN名]/[アプリケーション名]/S(SessionID)F(Forms認証の暗号化された認証チケット)/xxx.aspx

ASP.NET Mobile Web では、URLに埋め込まれたForms認証の[[Cookie認証チケット>認証基盤#la8f4c73]]などの情報を上手く引き継ぐために、~
画面遷移の際は、MobilePage.RedirectToMobilePage メソッドを使用する必要がある。

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

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

*参考 [#waedc31a]
**[[ASP.NET でSessionCookie、Cookie認証Ticketを共有する方法]] [#haa33d74]

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


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