20061125
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

20061125

  • 1,198 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,198
On Slideshare
1,197
From Embeds
1
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 1

https://twitter.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 使える!メンバーシップ・ロール・プロファイル どっとねっとふぁん http://dotnetfan.org 小野 修司
  • 2. メンバーシップコントロール入門 Login  - アカウントとパスワードによる認証 CreateUserWizard  - ユーザの登録 ChangePassword  - パスワード変更 PasswordRecovery  - パスワードの再送 LoginStatus  - ログイン状態表示 LoginName  - ログイン名表示 LoginView  - ログイン状態に応じた表示 Web サイト管理ツール  ユーザ、ロールの作成/アクセス規則の設定
  • 3. ノンコーディングでデモシステム Default.aspx  LoginStatus  LoginName  ChangePassword Login.aspx  Login  CreateUserWizard Web サイト管理ツール  認証の種類 - インターネットから  アクセス規則の作成 - 匿名ユーザを拒否 ASPNETDB.MDF  ユーザ情報を格納するデータベース(自動作成)
  • 4. メンバーシップの基礎 メンバーシップとは  ユーザを個別に認証/承認する仕組み 認証  ユーザを確認する  ASP.NET による Form 認証時にメンバーシップが有効  (参考)  ASP.NET における認証の種類  Windows 認証、 Form 認証、 Passport 認証  IIS における認証の種類  匿名アクセス、基本認証、統合 Windows 認証 承認  ページへのアクセス権を確認する  ユーザに対して許可/拒否
  • 5. 認証/承認のタイミング アプリケーションイベント( HttpApplication クラス)  すべてのリクエストに対して順を追って発生( Http パイプライン)  BeginRequest リクエストに対する処理の開始時に発生  AuthenticateRequest 認証の開始時に発生  PostAuthenticateRequest 認証の終了時に発生  AuthorizeRequest 承認の開始時に発生  PostAuthorizeRequest 承認の終了時に発生  ResolveRequestCache キャッシュの処理の開始時に発生  PostResolveRequestCache キャッシュの処理の終了時に発生  PostMapRequestHandler ハンドラの生成後に発生  AcquireRequestState セッション等の状態の取得時に発生  PostAcquireRequestState セッション等の状態の取得後に発生  PreRequestHandlerExecute ハンドラの実行前に発生          ( Page クラスの処理)  PostRequestHandlerExecute ハンドラの実行後に発生  ReleaseRequestState セッション等の状態の開放時に発生  PostReleaseRequestState セッション等の状態の開放後に発生  UpdateRequestCache キャッシュの状態更新時に発生  PostUpdateRequestCache キャッシュの状態更新後に発生  EndRequest リクエストに対する処理の終了時に発生
  • 6. 認証の設定• 認証 – 2.0 のデフォルト値(明示的な設定なし) • <authentication mode="Windows"> • <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> • <passport redirectUrl="internal" /> • </authentication> – メンバーシップのための設定 • <authentication mode="Forms" />
  • 7. 承認の設定• 承認 – 設定例(未認証ユーザを拒否) • <authorization> • <deny users=“?” /> • </authorization> – 許可( allow )/拒否( deny ) – すべてのユーザ” *” /未認証ユーザ” ?” – ロール/ユーザ名の個別指定 – 適用順序は記述順 • <deny roles=“manager”> • <allow roles=“Admins”> • Admins と manager 2つのロールを持つ人は拒否 – フォルダ/ファイル単位で設定可能 • フォルダ毎の web.config • Location 要素の利用
  • 8. メンバーシップのデフォルト設定• "C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIGmachine.config" – <membership> – <providers> – <add name=“AspNetSqlMembershipProvider” type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.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>• SqlMembershipProvider クラスを利用、各種プロパティを設定
  • 9. メンバーシッププロバイダ• ユーザの認証情報を保存/取得する• プロバイダを置き換えることで様々なデータストアに対応 – SqlMembershipProvider • SQL Server を利用 – ActiveDirectoryMembershipProvider • Active Directory を利用 – AccessProvider • Access を利用 • サンプルとして提供されている • http://msdn2.microsoft.com/en-us/asp.net/aa336558.aspx• ほかのプロバイダも含めてソースコードが公開されている – http://weblogs.asp.net/scottgu/archive/2006/04/13/442772.aspx – これを参考に Oracle 等に対するプロバイダの実装も可能
  • 10. メンバーシップ用 DB 設定• "C:WindowsMicrosoft.NETFrameworkv2.0.50727C ONFIGmachine.config“ – <connectionStrings> – <add name="LocalSqlServer" connectionString="data source=.SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory| aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> – </connectionStrings>
  • 11. メンバーシップ用データベース• ASPNETDB.MDF – “C:WindowsMicrosoft.NETFrameworkv2.0.50727ASP.NETWebA dminFilesApp_DataASPNETDB.MDF” からコピー – aspnet_regsql.exe により既存のデータベース上に必要なテーブ ル、ストアドプロシージャー等を追加できる – テーブル等を生成する SQL スクリプトも生成できる • aspnet_regsql.exe -sqlexportonly ファイル名 -A all • SQL サーバが利用できるレンタルサーバ上で利用可能 – 接続先データベースの変更 • <connectionStrings>         <remove name="LocalSqlServer"/>         <add name="LocalSqlServer” connectionString="server= サーバ名 ;uid= ユーザ ID;pwd= パスワード ;Trusted_Connection=no;database= データベ ース名 "           providerName="System.Data.SqlClient"/>   </connectionStrings>
  • 12. メンバーシップのカスタマイズ 見た目のカスタマイズ  オートフォーマットの適用  各種プロパティによる変更  テンプレート化して変更 表示項目のカスタマイズ  コントロールのプロパティと web.config の双方の調整が必 要  例: CreateUserWizard コントロールからメールと質問項目 を削除  コントロールの RequireEmail プロパティを False に変更  SqlMemberShipProvider の以下の設定を確認  RequiresUniqueEmail  -  False (デフォルト)  requiresQuestionAndAnswer  -  False
  • 13. メンバーシップ利用時の注意点 applicationName 要素の指定  デフォルト -  applicationName="/“  これを指定することで1つの DB で複数の Web アプ リケーションのメンバーシップを管理することも可 能  複数の Web アプリケーションで同一のユーザ情報 を管理することも可能
  • 14. ロールの基礎 ロールとは  ユーザをグループ単位で認証/承認する仕組み 認証  ユーザを確認する  ASP.NET による Windows 認証時、及び Form 認証時 にロールが有効 承認  ページへのアクセス権を確認する  ロールに対して許可/拒否
  • 15. ロールのデフォルト設定 "C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIGmachine.config“  <roleManager>  <providers>  <add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />  <add name="AspNetWindowsTokenRoleProvider" applicationName="/" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />  </providers>  </roleManager> SqlRoleProvider  データベース上にロールを作成/取得 WindowsTokenRoleProvider  ActiveDirectory からロールを取得
  • 16. ロールを有効にする 利用するための設定  Web.config の system.web 要素に以下を追加  <roleManager enabled="true" /> Windows 認証時の個別 Web アプリケーションのた めのロールの拡張  ADAM ( Active Directory Application Mode )を利用  SqlRoleProvider を利用
  • 17. ロールを作成/設定する ロールの作成  Web サイト管理ツールから作成  プログラム上から作成  Global.asax を利用する例  void Application_Start(object sender, EventArgs e)  {  if (!Roles.RoleExists("Administrator"))  Roles.CreateRole("Administrator");  } ロールとユーザを関連づける  Web サイト管理ツールから設定  プログラム上から設定  Roles.AddUsersToRole(new string[]{"shu"}, "Administrator");
  • 18. ロールを利用する フォルダ単位でロールによりアクセスを制限する  Admin フォルダ web.config  <authorization>  <allow roles="Admin"/>  <deny users ="*"/>  </authorization> ロールのアクセス権と TreeNode を連携する(セキュリティトリミング)  ルート web.config  <siteMap defaultProvider="XmlSiteMapProvider" enabled="true">  <providers>  <add name="XmlSiteMapProvider" type ="System.Web.XmlSiteMapProvider" securityTrimmingEnabled="true" siteMapFile="Web.sitemap"/>  </providers>  </siteMap>  SiteMap ファイル  <?xml version="1.0" encoding="utf-8" ?>  <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >  <siteMapNode url="Default.aspx" title="root">  <siteMapNode url=“AdminDefault.aspx” title=“Adminroot” description=“” roles=“Admin”   />  <siteMapNode url=“UserDefault.aspx” title=“Userroot” description=“” roles=“User” />  </siteMapNode>  </siteMap>  SiteMapNode のすべてに url が設定されている必要がある
  • 19. プロファイルの基礎 プロファイルとは  サイトに接続した利用者に関する任意の情報を保存/参照で きる仕組み  ログインしていないユーザもプロファイルを利用できる デフォルト設定  "C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIGmachi ne.config“  <profile>  <providers>  <add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />  </providers>  </profile>
  • 20. プロファイルを利用する web.config で設定  <profile>  <properties>  <add name="BloodType" serializeAs="String"/>  </properties>  </profile> プログラムで取得/設定  protected void Page_Load(object sender, EventArgs e)  {  if(!IsPostBack)  this.TextBox1.Text = Profile.BloodType;  }  protected void Button1_Click(object sender, EventArgs e)  {  Profile.BloodType = this.TextBox1.Text;  }
  • 21. 匿名ユーザプロファイルを利用する web.config で設定  <anonymousIdentification enabled="true"/>  <profile>  <properties>  <add name=“BloodType” serializeAs=“String” allowAnonymous="true" />  </properties>  </profile> プログラムの設定/取得方法は同一 匿名ユーザから認証ユーザへの情報の受け渡し  Global.asax を利用する方法  public void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs args)  {  ProfileCommon anonymousProfile = Profile.GetProfile(args.AnonymousID);  Profile.BloodType = anonymousProfile.BloodType;  }
  • 22. プロファイルをどう活用するか 永続化が必要なデータ Session オブジェクトではなくプロファイルを利用 できないか検討してみる  サーバ上のメモリを圧迫しない  強く型付けされたプログラムを記述できる
  • 23. メンバーシップの将来 AJAX でのサポート  メンバーシップベースの認証機能をサポート  AuthenicationServise クラス  ProfileService クラス IIS 7でのサポート  IIS7 のベースは ASP.NET に  メンバーシップも統合  Web サイト管理ツールと同様の処理が IIS7 の管理ツ ールとして利用可能に  Vista で確認
  • 24. まとめ 基礎となるクラスの設定方法を理解する  設定で動作をカスタマイズできる 必要であればカスタム Provider クラスを実装して 置き換え可能  コントロール類はそのまま利用可能 メンバーシップはこれからの ASP.NET アプリの基 礎  活用していくための知識を身につけておこう