Contenu connexe
Similaire à 20061125 (20)
20061125
- 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
- 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;
}
- 23. メンバーシップの将来
AJAX でのサポート
メンバーシップベースの認証機能をサポート
AuthenicationServise クラス
ProfileService クラス
IIS 7でのサポート
IIS7 のベースは ASP.NET に
メンバーシップも統合
Web サイト管理ツールと同様の処理が IIS7 の管理ツ
ールとして利用可能に
Vista で確認
- 24. まとめ
基礎となるクラスの設定方法を理解する
設定で動作をカスタマイズできる
必要であればカスタム Provider クラスを実装して
置き換え可能
コントロール類はそのまま利用可能
メンバーシップはこれからの ASP.NET アプリの基
礎
活用していくための知識を身につけておこう