Hatena::ブログ(Diary)

はむ日記

2011-06-11

ASP.NET 認証まわりメモ

メンバシップフレームワーク

Download Visual Studio 2005 Retired documentation from Official Microsoft Download Center
Download Visual Studio 2005 Retired documentation from Official Microsoft Download Center
Download Visual Studio 2005 Retired documentation from Official Microsoft Download Center
Download Visual Studio 2005 Retired documentation from Official Microsoft Download Center

DataSourceごとにプロバイダクラスを生成する必要がある。(DBSQL方言など?)
プロバイダの実装例ではmdb(Access)をデータストアとしたプロバイダの実装例が掲載されている。

メンバシップユーザーの項目を追加する場合は、独自のユーザークラスを作成する必要がある。
また、それに伴いプロバイダクラスも拡張が必要になる。これらクラスのソースコードが一部抜粋して掲載されている。

メンバーシップによるチェックが成功した後の動き

Membership.ValidateUser()でユーザー名とパスワードの確認を行い、
パスするとFormsAuthenticationクラスを使用して認証処理を行う。
(ASP.NET MVCの場合は自動生成されるAccountControllerクラスのソースコードを参照。)

認証チケットとは

第19回 フォーム認証を実装したASP.NETアプリケーション (1/2):連載 プログラミングASP.NET ―ASP.NETによるWebアプリケーション実践開発講座―  - @IT より
フォーム認証では、いったん認証されると認証チケットと呼ばれる資格情報がクッキーとしてクライアントへ送信される。 クライアントはこのクッキーを送信することで認証済みであることを示し、アプリケーションへアクセスすることができる。

認証チケット設定

認証チケット保存にCookieを使用するかWeb.configに指定しておく必要がある。
authentication/forms@cookieless 属性値に値をセットする。
ここで指定された値は、FormsAuthentication.CookieModeプロパティへセットされる。

※参照 FormsAuthentication.CookieMode プロパティ (System.Web.Security)
クッキーレスでの動作
Web.configのformsノードのcookieless属性値に"UseUri"を指定する。
<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" cookieless="UseUri" />
</authentication>


ログインするとURLが長くなる。これが認証チケット情報。
f:id:ham007:20110611115640p:image

トップページではない別のページを表示。
"http://localhost/<認証チケット情報>/<以降のUrl>" となる。
f:id:ham007:20110611115641p:image

認証チケット情報をUrlからはずすとログアウトしてしまう。
f:id:ham007:20110611115642p:image
認証クッキー名の変更
Web.configのformsノードのname属性値に"test"を指定する。デフォルト値は".ASPXAUTH"
<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" name="test" />
</authentication>

認証クッキー名称がname属性値になる。
f:id:ham007:20110611123312p:image

認証チケットの保存

FormsAuthentication.RedirectFromLoginPage()を呼び出すとチケットが発行され、
Cookieが有効な場合はCookieへ、無効な場合はHttpRequest.QueryStringプロパティへセットされる。
その後ページリダイレクトが発生する。

現在のログインユーザー情報をセットする

HttpモジュールのSystem.Web.Security.FormsAuthenticationModuleクラスが行う。
(C:\Windows\Microsoft.NET\ 以下にあるデフォルト設定のWeb.configで設定されている。)
認証チケットを復号してユーザー情報を生成、HttpContext.Userへセットする。

FormsAuthenticationModule クラス (System.Web.Security)

ユーザー情報(Principal)

System.Security.Principal.IPrincipalインターフェイス実装クラス。
Identityプロパティでユーザー情報2を返す。たいていはGenericPrincipalクラスが使用される?

IPrincipal インターフェイス (System.Security.Principal) GenericPrincipal クラス (System.Security.Principal)

ユーザー情報2(Identity)

System.Security.Principal.IIdentityインターフェイス実装クラス。
フォーム認証では、認証チケットからFormsIdentityオブジェクトを生成してユーザー情報にセット。
そしてHttpContext.Userへセットされる。

IIdentity インターフェイス (System.Security.Principal) FormsIdentity クラス (System.Web.Security)

PrincipalとIdentity

Principalはグループアカウント、Identityはユーザーアカウントだと考えることができる。詳しくは下記URLを参照。

プリンシパル オブジェクトと ID オブジェクト | Microsoft Docs

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証