SlideShare une entreprise Scribd logo
1  sur  27
ASP.NET Form認証 自由自在

      どっとねっとふぁん 小野修司
Form認証使ってますか?

   ASP.NET 4のサンプルサイトには含まれます
    が。。。
認証の基本的な動き

    リクエスト                リクエスト


  ターゲッ
    ト
  ページ


          ログイン
           ページ
 リダイレクト

                ターゲッ   ターゲッ
                  ト      ト
         リダイレクト ページ     ページ

    ログイン前              ログイン後
ASP.NET Form認証の仕組み
                          チケッ            チケッ
                           ト              ト

                                 認証
未認証                        認証             認証
ユーザー                      ユーザー           ユーザー

                                 承認
   ターゲッ          認証
     ト           チケッ
    ページ           ト



          ログイン
          ページ


                                      ターゲッ
                       ターゲット
                                        ト
                        ページ
                                       ページ


          ログイン前                   ログイン後
認証の要素
   認証(authentication)
       認証チケットを基にリクエストを行ったユーザーが誰か
        を設定する
           HttpContext.User


   承認(authorization)
       ユーザーの情報を基にリクエストされたURLに接続が可
        能かどうかを判定する

   Membership
       ユーザーを認証するための情報を保存/取得する
認証/承認のタイミング
    アプリケーションイベント(HttpApplicationクラス)
        すべてのリクエストに対して順を追って発生
         BeginRequest               リクエストに対する処理の開始時に発生
         AuthenticateRequest        認証の開始時に発生
         PostAuthenticateRequest    認証の終了時に発生
         AuthorizeRequest           承認の開始時に発生
         PostAuthorizeRequest       承認の終了時に発生
         ResolveRequestCache        キャッシュの処理の開始時に発生
         PostResolveRequestCache    キャッシュの処理の終了時に発生
         MapRequestHandler          ハンドラのマッピング時に発生
         PostMapRequestHandler      ハンドラのマッピング後に発生
         AcquireRequestState        セッション等の状態の取得時に発生
         PostAcquireRequestState    セッション等の状態の取得後に発生
         PreRequestHandlerExecute   ハンドラの実行前に発生
                       (HttpHandler処理)
         PostRequestHandlerExecute       ハンドラの実行後に発生
         ReleaseRequestState       セッション等の状態の開放時に発生
         PostReleaseRequestState セッション等の状態の開放後に発生
         UpdateRequestCache        キャッシュの状態更新時に発生
         PostUpdateRequestCache キャッシュの状態更新後に発生
         LogRequest                ログの記録の開始時に発生
         PostLogRequest            ログの記録の終了時に発生
         EndRequest                リクエストに対する処理の終了時に発生
HTTPパイプライン
                                   aspx
ブラウ   • リクエスト
                                   初期化

 ザ              HttpContext
                                 リクエスト読
                                  み込み
                    認証
                                 コントロール
                                 ツリー生成

                     承認
                                 コントロール
                                  イベント


         I      キャッシュ解決          ポストバック
                                  イベント
         I
         S      セッション情報取
                   得             レンダリング



                HttpHandler処理
                                MvcHandler     Controller
                セッション情報格                     (Actionメソッ
                   納                               ド)
ブラウ
 ザ    • レスポンス   キャッシュ情報格          .schtml       View
                   納              .vbhtml
認証
   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>
認証設定の注意点
   各要素の詳細はFormsAuthenticationクラスの同名のプロパティを参
    照
   mode
       デフォルトは”Windows”
       明示的に”Forms”を設定

   loginUrl
       ログインに利用するページのURLを設定
       承認で拒否されている状態でも利用可能

   cookieless
       デフォルトはbrowserファイルによる機種判別を利用
       “UseUri”を設定することでURLに認証チケットを埋め込み可能
           セキュリティの観点から利用は制限すべき

   セッションと認証チケットは異なるものであることを認識する
承認
   設定例(未認証ユーザーを拒否)
    <authorization>
       <deny users=“?” />
       <allow users=“*” />
    </authorization>

   許可(allow)/拒否(deny)
   すべてのユーザー(”*”)/未認証ユーザー(”?”)
   ユーザー名個別での指定も可能
   デフォルトはすべてのユーザーを許可

   適用順序が記述順であることに注意
       allow と deny の組み合わせがある場合に注意
        <deny users=“?” />
        <allow users=“*” />
         未認証ユーザーはすべてのユーザーに含まれるが拒否される
承認設定の注意点
   フォルダ/ファイル単位で設定可能
       フォルダ毎に 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
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>
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回失敗するとロック
       ロックは手動で解除する必要がある
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>
IIS7.x

   ASP.NETとの統合が行われ管理ツールから設定が可
    能
   アプリケーションプールのバージョンにより利用で
    きる設定に違いがある
    2.0           4
Form認証の有効化
承認規則の設定
ユーザーの管理
   Form認証が有効化されていることが必要
   既定のMembershipの設定が上書きされていると利用不可
   ASP.NET 4のアプリケーションプールに対しては存在しない
   ユーザーの追加/削除/ロック解除等が可能
Web FormでのForm認証
   コーディングレスで利用できる各種コントロールが
    提供されている
       Login
       LoginName
       LoginStatus
       LoginView
       ChangePassword
       CreateUserWizard
       PasswordRecovery

   web.configによる設定変更でコントロールが自動対
    応して動作が変わる
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フォルダに未認証ユーザーのアクセス拒否の設定
    プログラム中でコントロールの表示を固定化している
ASP.NET MVCでのForm認証
   既定
       認証の設定のみ
       承認については各コントロールにAuthorize属性を設定
           web.configを利用しない
       認証用のModel(AccontModelクラス)を定義


   承認の設定も利用可能
       アクセスしようとするURLに正しく設定すれば動作する
           承認用にフォルダを作成し、web.configを配置する
           ルートのweb.configにlocation要素を用いて設定する


   フィルタ機能を利用して独自の承認機能を実装することも
    可能
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フォルダはそもそも存在しない
Web PagesでのForm認証
   既定
       web.configに認証の設定の記述がない
       _AppStart.cshtmlでWebSecurity.InitializeDatabaseConnection()を
        実行することで認証が可能に
           Form認証を有効化し、認証のデフォルト値を設定する
           認証用データベース(StarterSite.mdf)が存在しない場合は構築
       承認については各ページ先頭で
        WebSecurity.RequireAuthenticatedUser()を呼び出す
       SimpleMembershipProviderを実装しているが、直接は利用できな
        い
           membership要素を用いて値を設定しようとするとエラーになる
           MembershipProviderのすべてのメンバーがサポートされているわけではな
            い

   承認の設定も利用可能
       アクセスしようとするURLに正しく設定すれば動作する
           フォルダにweb.configを配置する
           location要素を用いて設定する
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/
独自テーブルでユーザー管理

   ユーザーの追加/変更/削除は通常のデータ管理と同様
    に実装
   認証の設定はForm認証の通常設定
   承認の設定もForm認証の通常設定
       ASP.NET MVCのAuthorize属性も利用可
       Web PagesのWebSecurity.RequireAuthenticatedUser()も利用
        可
       HttpContext.User.Identity.IsAuthenticated の値で判断される
   Membershipの設定は不要

   ログイン時にFormsAuthenticationクラスのメソッドを利
    用する
       ユーザーの存在確認は独自に実装
       存在していればSetAuthCookieまたはRedirectFromLoginPage
        メソッドを利用する
           認証チケットが発行される
ASP.NET Form認証の仕組みを確認
                        チケッ                チケッ               チケッ

認証                       ト                  ト                 ト


     未認証
                        HttpContext.User.Identity.IsAuthenticated =
                        true
承認
 ターゲッ             認証
   ト              チケッ
  ページ              ト



           ログイン                                              ASP.NET MVC
           ページ                            Web Form           Web Pages

                                                        承認
                                    ターゲッ              ターゲッ
                    ターゲット
                                      ト                 ト
                     ページ
                                     ページ               ページ


           ログイン前                              ログイン後
まとめ
   ASP.NET Form認証の仕組みを理解する
       認証
       承認
       Membership

と

   環境にあわせて自由に利用できるようになる
       Web Form
       ASP.NET MVC
       Web Pages
       WCFでも利用可能(ASP.NETに統合時)

Contenu connexe

Tendances

html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた Shumpei Shiraishi
 
Start React with Browserify
Start React with BrowserifyStart React with Browserify
Start React with BrowserifyMuyuu Fujita
 
AJAXのBASIC認証検証結果
AJAXのBASIC認証検証結果AJAXのBASIC認証検証結果
AJAXのBASIC認証検証結果Shintaro Mizunuma
 
Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2Yoshi Nagase
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Hideki Hashizume
 
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版junichi anno
 
Dynamic Access Control 解説編
Dynamic Access Control 解説編Dynamic Access Control 解説編
Dynamic Access Control 解説編junichi anno
 
20140926 mt cloud_handson_seminar
20140926 mt cloud_handson_seminar20140926 mt cloud_handson_seminar
20140926 mt cloud_handson_seminarSix Apart
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発Akira Inoue
 
Windows.Web.Http.HttpClientとWebAuthenticationBroker
Windows.Web.Http.HttpClientとWebAuthenticationBrokerWindows.Web.Http.HttpClientとWebAuthenticationBroker
Windows.Web.Http.HttpClientとWebAuthenticationBrokerNobuaki Aoki
 
Infrastructure as code for azure
Infrastructure as code for azureInfrastructure as code for azure
Infrastructure as code for azureKeiji Kamebuchi
 
Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版junichi anno
 
実践・ブラウザテスト自動化
実践・ブラウザテスト自動化実践・ブラウザテスト自動化
実践・ブラウザテスト自動化takahiro sakuma
 
ARC-003_モダン Web: たった今と、ほんの少し未来の話
ARC-003_モダン Web: たった今と、ほんの少し未来の話ARC-003_モダン Web: たった今と、ほんの少し未来の話
ARC-003_モダン Web: たった今と、ほんの少し未来の話decode2016
 
Pro aspnetmvc3framework chap23
Pro aspnetmvc3framework chap23Pro aspnetmvc3framework chap23
Pro aspnetmvc3framework chap23Hideki Hashizume
 

Tendances (20)

html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
 
Java script
Java scriptJava script
Java script
 
Start React with Browserify
Start React with BrowserifyStart React with Browserify
Start React with Browserify
 
AJAXのBASIC認証検証結果
AJAXのBASIC認証検証結果AJAXのBASIC認証検証結果
AJAXのBASIC認証検証結果
 
20090418
2009041820090418
20090418
 
Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19
 
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
 
Dynamic Access Control 解説編
Dynamic Access Control 解説編Dynamic Access Control 解説編
Dynamic Access Control 解説編
 
20140926 mt cloud_handson_seminar
20140926 mt cloud_handson_seminar20140926 mt cloud_handson_seminar
20140926 mt cloud_handson_seminar
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 
Windows.Web.Http.HttpClientとWebAuthenticationBroker
Windows.Web.Http.HttpClientとWebAuthenticationBrokerWindows.Web.Http.HttpClientとWebAuthenticationBroker
Windows.Web.Http.HttpClientとWebAuthenticationBroker
 
Mobile Web
Mobile WebMobile Web
Mobile Web
 
Mvc conf session_5_isami
Mvc conf session_5_isamiMvc conf session_5_isami
Mvc conf session_5_isami
 
Infrastructure as code for azure
Infrastructure as code for azureInfrastructure as code for azure
Infrastructure as code for azure
 
Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版
 
実践・ブラウザテスト自動化
実践・ブラウザテスト自動化実践・ブラウザテスト自動化
実践・ブラウザテスト自動化
 
Ajax basic
Ajax basicAjax basic
Ajax basic
 
ARC-003_モダン Web: たった今と、ほんの少し未来の話
ARC-003_モダン Web: たった今と、ほんの少し未来の話ARC-003_モダン Web: たった今と、ほんの少し未来の話
ARC-003_モダン Web: たった今と、ほんの少し未来の話
 
Pro aspnetmvc3framework chap23
Pro aspnetmvc3framework chap23Pro aspnetmvc3framework chap23
Pro aspnetmvc3framework chap23
 

En vedette (8)

20070310
2007031020070310
20070310
 
20120425
2012042520120425
20120425
 
20110607
2011060720110607
20110607
 
20120128
2012012820120128
20120128
 
4. многолетнемерзлые породы
4. многолетнемерзлые породы4. многолетнемерзлые породы
4. многолетнемерзлые породы
 
20120616
2012061620120616
20120616
 
20121215
2012121520121215
20121215
 
20140322
2014032220140322
20140322
 

Similaire à 20111203

Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編なべ
 
Twitter連携chrome extension作り方
Twitter連携chrome extension作り方Twitter連携chrome extension作り方
Twitter連携chrome extension作り方Hiroshi Oyamada
 
OAuth 2.0 と ライブラリ
OAuth 2.0 と ライブラリOAuth 2.0 と ライブラリ
OAuth 2.0 と ライブラリKenji Otsuka
 
20101110 Tech02 ID 管理およびサービスの設定
20101110 Tech02 ID 管理およびサービスの設定20101110 Tech02 ID 管理およびサービスの設定
20101110 Tech02 ID 管理およびサービスの設定kumo2010
 
勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発Kazuki Nakajima
 
認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーションMasashi Shinbara
 
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライAzure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライMasanobu Sato
 
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回SORACOM, INC
 
Financial-grade API Hands-on with Authlete
Financial-grade API Hands-on with AuthleteFinancial-grade API Hands-on with Authlete
Financial-grade API Hands-on with AuthleteTatsuo Kudo
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-publicAmazon Web Services Japan
 
AzureActiveDirectoryの認証の話(Azure周りの自動化編)
AzureActiveDirectoryの認証の話(Azure周りの自動化編)AzureActiveDirectoryの認証の話(Azure周りの自動化編)
AzureActiveDirectoryの認証の話(Azure周りの自動化編)Masahiko Ebisuda
 
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみようAlfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみようTasuku Otani
 

Similaire à 20111203 (20)

Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編
 
20080524
2008052420080524
20080524
 
20081003
2008100320081003
20081003
 
20090212
2009021220090212
20090212
 
20050917
2005091720050917
20050917
 
AWS CLIでAssumeRole
AWS CLIでAssumeRoleAWS CLIでAssumeRole
AWS CLIでAssumeRole
 
Twitter連携chrome extension作り方
Twitter連携chrome extension作り方Twitter連携chrome extension作り方
Twitter連携chrome extension作り方
 
OAuth 2.0 と ライブラリ
OAuth 2.0 と ライブラリOAuth 2.0 と ライブラリ
OAuth 2.0 と ライブラリ
 
20101110 Tech02 ID 管理およびサービスの設定
20101110 Tech02 ID 管理およびサービスの設定20101110 Tech02 ID 管理およびサービスの設定
20101110 Tech02 ID 管理およびサービスの設定
 
勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発
 
認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション
 
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライAzure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
 
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
 
Financial-grade API Hands-on with Authlete
Financial-grade API Hands-on with AuthleteFinancial-grade API Hands-on with Authlete
Financial-grade API Hands-on with Authlete
 
継続的8章
継続的8章継続的8章
継続的8章
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public
 
後期02
後期02後期02
後期02
 
AzureActiveDirectoryの認証の話(Azure周りの自動化編)
AzureActiveDirectoryの認証の話(Azure周りの自動化編)AzureActiveDirectoryの認証の話(Azure周りの自動化編)
AzureActiveDirectoryの認証の話(Azure周りの自動化編)
 
Web 11
Web 11Web 11
Web 11
 
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみようAlfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
 

Plus de 小野 修司 (17)

20100313
2010031320100313
20100313
 
20100224
2010022420100224
20100224
 
20100218 lt
20100218 lt20100218 lt
20100218 lt
 
20100218
2010021820100218
20100218
 
20091207
2009120720091207
20091207
 
20090711
2009071120090711
20090711
 
20090606
2009060620090606
20090606
 
20090328
2009032820090328
20090328
 
20080630
2008063020080630
20080630
 
20080627 2
20080627 220080627 2
20080627 2
 
20080627 1
20080627 120080627 1
20080627 1
 
20080213
2008021320080213
20080213
 
20080201
2008020120080201
20080201
 
20071204
2007120420071204
20071204
 
20071030
2007103020071030
20071030
 
20061122
2006112220061122
20061122
 
20060419
2006041920060419
20060419
 

20111203

  • 1. ASP.NET Form認証 自由自在 どっとねっとふぁん 小野修司
  • 2. Form認証使ってますか?  ASP.NET 4のサンプルサイトには含まれます が。。。
  • 3. 認証の基本的な動き リクエスト リクエスト ターゲッ ト ページ ログイン ページ リダイレクト ターゲッ ターゲッ ト ト リダイレクト ページ ページ ログイン前 ログイン後
  • 4. ASP.NET Form認証の仕組み チケッ チケッ ト ト 認証 未認証 認証 認証 ユーザー ユーザー ユーザー 承認 ターゲッ 認証 ト チケッ ページ ト ログイン ページ ターゲッ ターゲット ト ページ ページ ログイン前 ログイン後
  • 5. 認証の要素  認証(authentication)  認証チケットを基にリクエストを行ったユーザーが誰か を設定する  HttpContext.User  承認(authorization)  ユーザーの情報を基にリクエストされたURLに接続が可 能かどうかを判定する  Membership  ユーザーを認証するための情報を保存/取得する
  • 6. 認証/承認のタイミング  アプリケーションイベント(HttpApplicationクラス)  すべてのリクエストに対して順を追って発生 BeginRequest リクエストに対する処理の開始時に発生 AuthenticateRequest 認証の開始時に発生 PostAuthenticateRequest 認証の終了時に発生 AuthorizeRequest 承認の開始時に発生 PostAuthorizeRequest 承認の終了時に発生 ResolveRequestCache キャッシュの処理の開始時に発生 PostResolveRequestCache キャッシュの処理の終了時に発生 MapRequestHandler ハンドラのマッピング時に発生 PostMapRequestHandler ハンドラのマッピング後に発生 AcquireRequestState セッション等の状態の取得時に発生 PostAcquireRequestState セッション等の状態の取得後に発生 PreRequestHandlerExecute ハンドラの実行前に発生 (HttpHandler処理) PostRequestHandlerExecute ハンドラの実行後に発生 ReleaseRequestState セッション等の状態の開放時に発生 PostReleaseRequestState セッション等の状態の開放後に発生 UpdateRequestCache キャッシュの状態更新時に発生 PostUpdateRequestCache キャッシュの状態更新後に発生 LogRequest ログの記録の開始時に発生 PostLogRequest ログの記録の終了時に発生 EndRequest リクエストに対する処理の終了時に発生
  • 7. HTTPパイプライン aspx ブラウ • リクエスト 初期化 ザ HttpContext リクエスト読 み込み 認証 コントロール ツリー生成 承認 コントロール イベント I キャッシュ解決 ポストバック イベント I S セッション情報取 得 レンダリング HttpHandler処理 MvcHandler Controller セッション情報格 (Actionメソッ 納 ド) ブラウ ザ • レスポンス キャッシュ情報格 .schtml View 納 .vbhtml
  • 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. 認証設定の注意点  各要素の詳細はFormsAuthenticationクラスの同名のプロパティを参 照  mode  デフォルトは”Windows”  明示的に”Forms”を設定  loginUrl  ログインに利用するページのURLを設定  承認で拒否されている状態でも利用可能  cookieless  デフォルトはbrowserファイルによる機種判別を利用  “UseUri”を設定することでURLに認証チケットを埋め込み可能  セキュリティの観点から利用は制限すべき  セッションと認証チケットは異なるものであることを認識する
  • 10. 承認  設定例(未認証ユーザーを拒否) <authorization> <deny users=“?” /> <allow users=“*” /> </authorization>  許可(allow)/拒否(deny)  すべてのユーザー(”*”)/未認証ユーザー(”?”)  ユーザー名個別での指定も可能  デフォルトはすべてのユーザーを許可  適用順序が記述順であることに注意  allow と deny の組み合わせがある場合に注意 <deny users=“?” /> <allow users=“*” /> 未認証ユーザーはすべてのユーザーに含まれるが拒否される
  • 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. 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. 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. 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. IIS7.x  ASP.NETとの統合が行われ管理ツールから設定が可 能  アプリケーションプールのバージョンにより利用で きる設定に違いがある 2.0 4
  • 18. ユーザーの管理  Form認証が有効化されていることが必要  既定のMembershipの設定が上書きされていると利用不可  ASP.NET 4のアプリケーションプールに対しては存在しない  ユーザーの追加/削除/ロック解除等が可能
  • 19. Web FormでのForm認証  コーディングレスで利用できる各種コントロールが 提供されている  Login  LoginName  LoginStatus  LoginView  ChangePassword  CreateUserWizard  PasswordRecovery  web.configによる設定変更でコントロールが自動対 応して動作が変わる
  • 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. ASP.NET MVCでのForm認証  既定  認証の設定のみ  承認については各コントロールにAuthorize属性を設定  web.configを利用しない  認証用のModel(AccontModelクラス)を定義  承認の設定も利用可能  アクセスしようとするURLに正しく設定すれば動作する  承認用にフォルダを作成し、web.configを配置する  ルートのweb.configにlocation要素を用いて設定する  フィルタ機能を利用して独自の承認機能を実装することも 可能
  • 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. Web PagesでのForm認証  既定  web.configに認証の設定の記述がない  _AppStart.cshtmlでWebSecurity.InitializeDatabaseConnection()を 実行することで認証が可能に  Form認証を有効化し、認証のデフォルト値を設定する  認証用データベース(StarterSite.mdf)が存在しない場合は構築  承認については各ページ先頭で WebSecurity.RequireAuthenticatedUser()を呼び出す  SimpleMembershipProviderを実装しているが、直接は利用できな い  membership要素を用いて値を設定しようとするとエラーになる  MembershipProviderのすべてのメンバーがサポートされているわけではな い  承認の設定も利用可能  アクセスしようとするURLに正しく設定すれば動作する  フォルダにweb.configを配置する  location要素を用いて設定する
  • 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. 独自テーブルでユーザー管理  ユーザーの追加/変更/削除は通常のデータ管理と同様 に実装  認証の設定はForm認証の通常設定  承認の設定もForm認証の通常設定  ASP.NET MVCのAuthorize属性も利用可  Web PagesのWebSecurity.RequireAuthenticatedUser()も利用 可  HttpContext.User.Identity.IsAuthenticated の値で判断される  Membershipの設定は不要  ログイン時にFormsAuthenticationクラスのメソッドを利 用する  ユーザーの存在確認は独自に実装  存在していればSetAuthCookieまたはRedirectFromLoginPage メソッドを利用する  認証チケットが発行される
  • 26. ASP.NET Form認証の仕組みを確認 チケッ チケッ チケッ 認証 ト ト ト 未認証 HttpContext.User.Identity.IsAuthenticated = true 承認 ターゲッ 認証 ト チケッ ページ ト ログイン ASP.NET MVC ページ Web Form Web Pages 承認 ターゲッ ターゲッ ターゲット ト ト ページ ページ ページ ログイン前 ログイン後
  • 27. まとめ  ASP.NET Form認証の仕組みを理解する  認証  承認  Membership と  環境にあわせて自由に利用できるようになる  Web Form  ASP.NET MVC  Web Pages  WCFでも利用可能(ASP.NETに統合時)