20111203

3,595 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,595
On SlideShare
0
From Embeds
0
Number of Embeds
1,924
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

20111203

  1. 1. ASP.NET Form認証 自由自在 どっとねっとふぁん 小野修司
  2. 2. Form認証使ってますか? ASP.NET 4のサンプルサイトには含まれます が。。。
  3. 3. 認証の基本的な動き リクエスト リクエスト ターゲッ ト ページ ログイン ページ リダイレクト ターゲッ ターゲッ ト ト リダイレクト ページ ページ ログイン前 ログイン後
  4. 4. ASP.NET Form認証の仕組み チケッ チケッ ト ト 認証未認証 認証 認証ユーザー ユーザー ユーザー 承認 ターゲッ 認証 ト チケッ ページ ト ログイン ページ ターゲッ ターゲット ト ページ ページ ログイン前 ログイン後
  5. 5. 認証の要素 認証(authentication)  認証チケットを基にリクエストを行ったユーザーが誰か を設定する  HttpContext.User 承認(authorization)  ユーザーの情報を基にリクエストされたURLに接続が可 能かどうかを判定する Membership  ユーザーを認証するための情報を保存/取得する
  6. 6. 認証/承認のタイミング  アプリケーションイベント(HttpApplicationクラス)  すべてのリクエストに対して順を追って発生 BeginRequest リクエストに対する処理の開始時に発生 AuthenticateRequest 認証の開始時に発生 PostAuthenticateRequest 認証の終了時に発生 AuthorizeRequest 承認の開始時に発生 PostAuthorizeRequest 承認の終了時に発生 ResolveRequestCache キャッシュの処理の開始時に発生 PostResolveRequestCache キャッシュの処理の終了時に発生 MapRequestHandler ハンドラのマッピング時に発生 PostMapRequestHandler ハンドラのマッピング後に発生 AcquireRequestState セッション等の状態の取得時に発生 PostAcquireRequestState セッション等の状態の取得後に発生 PreRequestHandlerExecute ハンドラの実行前に発生 (HttpHandler処理) PostRequestHandlerExecute ハンドラの実行後に発生 ReleaseRequestState セッション等の状態の開放時に発生 PostReleaseRequestState セッション等の状態の開放後に発生 UpdateRequestCache キャッシュの状態更新時に発生 PostUpdateRequestCache キャッシュの状態更新後に発生 LogRequest ログの記録の開始時に発生 PostLogRequest ログの記録の終了時に発生 EndRequest リクエストに対する処理の終了時に発生
  7. 7. HTTPパイプライン aspxブラウ • リクエスト 初期化 ザ HttpContext リクエスト読 み込み 認証 コントロール ツリー生成 承認 コントロール イベント I キャッシュ解決 ポストバック イベント I S セッション情報取 得 レンダリング HttpHandler処理 MvcHandler Controller セッション情報格 (Actionメソッ 納 ド)ブラウ ザ • レスポンス キャッシュ情報格 .schtml View 納 .vbhtml
  8. 8. 認証 FormsAuthenticationModule により実現 デフォルト設定 (authentication 要素のドキュメントにより確認) <authentication mode=“Forms"> <forms name=“.ASPXAUTH” loginUrl="login.aspx" defaultUrl="default.aspx" protection="All" timeout="30" path="/" requireSSL="false" slidingExpiration="true" cookieless="UseDeviceProfile“ domain="" enableCrossAppRedirects="false"> <credentials passwordFormat="SHA1" /> </forms> </authentication>
  9. 9. 認証設定の注意点 各要素の詳細はFormsAuthenticationクラスの同名のプロパティを参 照 mode  デフォルトは”Windows”  明示的に”Forms”を設定 loginUrl  ログインに利用するページのURLを設定  承認で拒否されている状態でも利用可能 cookieless  デフォルトはbrowserファイルによる機種判別を利用  “UseUri”を設定することでURLに認証チケットを埋め込み可能  セキュリティの観点から利用は制限すべき セッションと認証チケットは異なるものであることを認識する
  10. 10. 承認 設定例(未認証ユーザーを拒否) <authorization> <deny users=“?” /> <allow users=“*” /> </authorization> 許可(allow)/拒否(deny) すべてのユーザー(”*”)/未認証ユーザー(”?”) ユーザー名個別での指定も可能 デフォルトはすべてのユーザーを許可 適用順序が記述順であることに注意  allow と deny の組み合わせがある場合に注意 <deny users=“?” /> <allow users=“*” /> 未認証ユーザーはすべてのユーザーに含まれるが拒否される
  11. 11. 承認設定の注意点 フォルダ/ファイル単位で設定可能  フォルダ毎に web.config を置いて設定できる  トップフォルダの web.config のみで設定を管理したい場合はlocation 要 素を利用する  ファイルを個別に指定したい場合はlocation要素を利用する  リクエストされたURLに基づき、許可/拒否を判定する <?xml version="1.0"?> <configuration> <location path="Register.aspx"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location> <system.web> <authorization> <deny users="?"/> </authorization> Web Formサンプルサイト </system.web> Accountフォルダ内 </configuration> web.config
  12. 12. Membership machine.configにデフォルト設定が記述されている SqlMembershipProviderを利用 <membership> <providers> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/> </providers> </membership>
  13. 13. Membership設定の注意点 connectionStringName  “LocalSqlServer”は同じくmachine.config内に記述されている <add name="LocalSqlServer" connectionString="data source=.SQLEXPRESS;Integrated Security=SSPI; AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/> requiresQuestionAndAnswer  デフォルトではパスワードの質問と回答を必要とする minRequiredPasswordLength minRequiredNonalphanumericCharacters  デフォルトではパスワードは7文字以上、特殊文字1文字以上 maxInvalidPasswordAttempts  passwordAttemptWindowの時間(分単位)中に5回失敗するとロック  ロックは手動で解除する必要がある
  14. 14. SqlMembershipProvider用データベース ASPNETDB.MDF  aspnet_regsql.exe により既存のデータベース上に必要なテー ブル、ストアドプロシージャー等を追加できる  テーブル等を生成するSQLスクリプトも生成できる  aspnet_regsql.exe -sqlexportonly ファイル名 -A all  アプリケーションで利用するテーブルを追加することも可能  接続先データベースの変更(LocalSqlServerを上書きする場 合)  <connectionStrings> <remove name="LocalSqlServer"/> <add name="LocalSqlServer” connectionString="server=サーバ名;uid=ユーザID; pwd=パスワード;Trusted_Connection=no; database=データベース名“ providerName="System.Data.SqlClient"/> </connectionStrings>
  15. 15. IIS7.x ASP.NETとの統合が行われ管理ツールから設定が可 能 アプリケーションプールのバージョンにより利用で きる設定に違いがある 2.0 4
  16. 16. Form認証の有効化
  17. 17. 承認規則の設定
  18. 18. ユーザーの管理 Form認証が有効化されていることが必要 既定のMembershipの設定が上書きされていると利用不可 ASP.NET 4のアプリケーションプールに対しては存在しない ユーザーの追加/削除/ロック解除等が可能
  19. 19. Web FormでのForm認証 コーディングレスで利用できる各種コントロールが 提供されている  Login  LoginName  LoginStatus  LoginView  ChangePassword  CreateUserWizard  PasswordRecovery web.configによる設定変更でコントロールが自動対 応して動作が変わる
  20. 20. Web Form サンプルサイトの設定 <authentication mode="Forms"> <forms loginUrl="~/Account/Login.aspx" timeout="2880" /> </authentication> <membership> <providers> <clear/> <add name=“AspNetSqlMembershipProvider” type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts=“5” minRequiredPasswordLength=“6” minRequiredNonalphanumericCharacters=“0” passwordAttemptWindow=“10” applicationName="/" /> </providers> </membership> Accountフォルダに未認証ユーザーのアクセス拒否の設定 プログラム中でコントロールの表示を固定化している
  21. 21. ASP.NET MVCでのForm認証 既定  認証の設定のみ  承認については各コントロールにAuthorize属性を設定  web.configを利用しない  認証用のModel(AccontModelクラス)を定義 承認の設定も利用可能  アクセスしようとするURLに正しく設定すれば動作する  承認用にフォルダを作成し、web.configを配置する  ルートのweb.configにlocation要素を用いて設定する フィルタ機能を利用して独自の承認機能を実装することも 可能
  22. 22. ASP.NET MVCサンプルサイトの設定 <authentication mode="Forms"> <forms loginUrl="~/Account/Login.aspx" timeout="2880" /> </authentication> <membership> <providers> <clear/> <add name=“AspNetSqlMembershipProvider” type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts=“5” minRequiredPasswordLength=“6” minRequiredNonalphanumericCharacters=“0” passwordAttemptWindow=“10” applicationName="/" /> </providers> </membership> Web Formと同じ Accountフォルダはそもそも存在しない
  23. 23. Web PagesでのForm認証 既定  web.configに認証の設定の記述がない  _AppStart.cshtmlでWebSecurity.InitializeDatabaseConnection()を 実行することで認証が可能に  Form認証を有効化し、認証のデフォルト値を設定する  認証用データベース(StarterSite.mdf)が存在しない場合は構築  承認については各ページ先頭で WebSecurity.RequireAuthenticatedUser()を呼び出す  SimpleMembershipProviderを実装しているが、直接は利用できな い  membership要素を用いて値を設定しようとするとエラーになる  MembershipProviderのすべてのメンバーがサポートされているわけではな い 承認の設定も利用可能  アクセスしようとするURLに正しく設定すれば動作する  フォルダにweb.configを配置する  location要素を用いて設定する
  24. 24. Form認証を拡張する カスタムメンバーシッププロバイダを作成する  System.Web.Security.MembershipProvider を継承  SQL Server以外のデータベースを利用したい場合  ASPNETDB以外のDB構成を利用したい場合  サンプルメンバーシッププロバイダーの実装例  http://msdn.microsoft.com/ja-jp/library/6tc47t75(v=VS.100).aspx  (参考)SimpleMembershipProvider(Web Pages)の利 用方法  ASP.NET MVC  http://www.makcraft.com/blog/meditation/2011/06/06/user- authentication-using-webmatrix-webdata-websecurity-1/  http://www.makcraft.com/blog/meditation/2011/06/13/user- authentication-using-webmatrix-webdata-websecurity-2/
  25. 25. 独自テーブルでユーザー管理 ユーザーの追加/変更/削除は通常のデータ管理と同様 に実装 認証の設定はForm認証の通常設定 承認の設定もForm認証の通常設定  ASP.NET MVCのAuthorize属性も利用可  Web PagesのWebSecurity.RequireAuthenticatedUser()も利用 可  HttpContext.User.Identity.IsAuthenticated の値で判断される Membershipの設定は不要 ログイン時にFormsAuthenticationクラスのメソッドを利 用する  ユーザーの存在確認は独自に実装  存在していればSetAuthCookieまたはRedirectFromLoginPage メソッドを利用する  認証チケットが発行される
  26. 26. ASP.NET Form認証の仕組みを確認 チケッ チケッ チケッ認証 ト ト ト 未認証 HttpContext.User.Identity.IsAuthenticated = true承認 ターゲッ 認証 ト チケッ ページ ト ログイン ASP.NET MVC ページ Web Form Web Pages 承認 ターゲッ ターゲッ ターゲット ト ト ページ ページ ページ ログイン前 ログイン後
  27. 27. まとめ ASP.NET Form認証の仕組みを理解する  認証  承認  Membershipと 環境にあわせて自由に利用できるようになる  Web Form  ASP.NET MVC  Web Pages  WCFでも利用可能(ASP.NETに統合時)

×