SharePoint アドイン製品一覧
SharePoint 2010 開発のステップ・バイ・ステップ
Windows Azure 入門
Windows Azure How-To 集
WCF / WF 入門
環境:Visual Studio 2008
.NET Framework 3.5 セキュリティ / 認証あれこれ
こんにちは。
今日は、クライアント アプリケーション サービスについて記載します。
ASP.NET では、Windows 統合認証以外に、独自なユーザID, パスワード管理をおこなうことができるプロバイダー(メンバーシッププロバイダーなど)を使用したフォーム認証と呼ばれる仕組みが存在しています。一方、WPF や、Windows フォームクライアントではこうした仕組みの実装は独自にすべての仕組みを構築する必要がありました。
.NET Framework 3.5 からは、クライアントアプリケーションサービスと仕組みによって、この実装のためのフレームワークが追加で提供されています。さっそく、シンプルなデモでその仕組みをみていきます。
【サービス側の作成】
この仕組みを使用するには、まず、メンバーシップやロールの情報などを公開するサービスを構築します。そして、そのサービスを呼び出してクライアントアプリケーションサービスを使用するクライアントを実装するという手順になります。まずは、サービス側を実装していきます。
これでサービス側は完成です。このサービスが、いつも同じポート番号で起動するように、プロジェクトのプロパティ画面で [Web] タブを選択し、ポートを [ポートの自動割り当て] から 5555 に変更し、仮想パスを、[仮想パス] を /AppServices にしておきましょう。
このサービスをデバッグ実行などで起動しておきましょう。
【クライアント側の作成】
では、クライアント側を作成していきます。
クライアントアプリケーションをリビルドし起動すると、最初に上図のログイン画面が表示され、ここに、ID: test, Password: test0 を入力しないとフォームは開かなくなります。
上記ではサンプルを簡単にするためメンバーシッププロバイダーしか使用しませんでしたが、ロールやプロファイルも扱うことができます。ASP.NET のメンバーシップやロール、プロファイルなどのプロバイバーに詳しい方はお分かり頂けると思いますが、上記のようにカスタムなプロバイダーを構築することで Oracle などのストレージに保管されたユーザID/パスワード情報と連携するなど、応用もさまざま可能になります。また、.NET Framework がデフォルトで提供している SqlMembershipProvider などを使えば、ストレージの作成からプロバイダーの実装まで、既に提供されたものをそのまま使用することができます。Active Directory に保管されたユーザID, パスワード情報などをそのまま使いたいなら、ActiveDirectoryMembershipProvider も使えます。サービス側の web.config を下記のように書き換えてみてください。
<connectionStrings> <add name="LDAPConnString" connectionString="LDAP://domain_controller_machinename/CN=Users,DC=example,DC=jp" /></connectionStrings>
<membership defaultProvider="TestMembershipProvider"> <providers> <!--add name="TestMembershipProvider" type="AppServices.TestMembershipProvider"/--> <add name="TestMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LDAPConnString" connectionUsername="example\Administrator" connectionPassword="P@ssw0rd" attributeMapUsername="sAMAccountName"/> </providers></membership>
(connectionUsername と connectionPassword は、Directory の参照権限のあるユーザ (ここでは、ドメインの Administrator を使いました) で接続するように設定しましょう。また、attributeMapUsername は、デフォルトでは userPrincipalName ですので、通常は、ユーザ名として UserName@DomainName の形式を指定しますが、ここでは UserName だけをユーザ名として扱えるように設定しています。)
これで、Active Directory で管理されているユーザログオン名とパスワードがそのまま使用できます。
クライアントアプリケーションサービスについては、MSDN で以下に詳述されています。
http://msdn2.microsoft.com/ja-jp/library/bb384297.aspx
PingBack from http://blogs.msdn.com/tsmatsuz/archive/2008/02/26/net-framework-3-5-client-application-service.aspx