WCF: WCF Web サービス内で呼び出し元の ID を確認する (パート 2/4)
概要: この 4 部構成の記事では、Microsoft SharePoint Foundation 2010 におけるユーザーの認証について学習します。Microsoft Business Connectivity Services (BCS) から外部コンテンツ タイプとして使用する Windows Communication Foundation (WCF) Web サービスの呼び出し元の ID を確認する方法を学習します。
最終更新日: 2011年1月12日
この記事の内容
概要
例をビルドする
まとめ
その他の技術情報
適用対象: Business Connectivity Services | Office 2010 | Open XML | SharePoint Designer 2010 | SharePoint Foundation 2010 | SharePoint Online | SharePoint Server 2010 | Visual Studio
提供元: Eric White、Microsoft Corporation | Saji Varkey、Microsoft Corporation | Bin Zhang、Microsoft Corporation
目次
概要
例をビルドする
まとめ
その他の技術情報
この記事は、Business Connectivity Services を使用してクレーム対応 Web サービスを作成および実装する方法を示す 4 部構成の記事の 2 つ目です。
WCF: Services for SharePoint 2010 Business Connectivity Services 用 WCF Web サービスのビルド (パート 1/4)
WCF: WCF Web サービスと SharePoint 2010 Security Token Service 間の信頼関係の確立 (パート 3/4)
WCF: SharePoint 2010 外部コンテンツ タイプとしてのクレーム対応 WCF Web サービスの利用 (パート 4 / 4)
概要
Windows Identity Foundation (WIF) は、ID のロジックを非常に詳細に制御できます。WIF を使用して、Web サービス内部から呼び出し元の ID を確認できます。この記事に示す例では、このシリーズの前の記事「WCF: Services for SharePoint 2010 Business Connectivity Services 用 WCF Web サービスのビルド (パート 1/4)」に示す例を強化して、呼び出し元の ID を確認します。Web サービスの呼び出しごとに、Web サービスを呼び出しているユーザーの ID がログ ファイルに追加されます。このログ ファイルを調べて、呼び出し元の ID を確認できます。
例をビルドする
例をビルドするには
Windows Identity Foundation (英語) をダウンロードして、インストールします。WIF は、Windows Communication Foundation (WCF) Web サービスを構築したコンピューターにインストールしてください。
Web サービスを構築するには、このシリーズの最初の記事「WCF: Services for SharePoint 2010 Business Connectivity Services 用 WCF Web サービスのビルド (パート 1/4)」で作成したプロジェクトを開きます。
[Microsoft.IdentityModel] アセンブリへの参照を追加します。Microsoft Visual Studio 2010 または Visual Studio 2008 で [プロジェクト] をクリックし、[参照の追加] をクリックします。
[参照] タブをクリックし、 %ProgramFiles%\Reference Assemblies\Microsoft\Windows Identity Foundation\v3.5 を参照します。
図 1. Windows Identity Foundation アセンブリの場所
[Microsoft.IdentityModel.dll] を選択し、[OK] をクリックします。
図 2. Windows ID フレームワーク DLL を選択する
Customers.svc.cs の内容を以下のコードで置き換えます。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using Microsoft.IdentityModel.Claims; namespace CustomersService { public class Customers : ICustomers { private const string IdentityClaimType = @"https://schemas.microsoft.com/sharepoint/2009/08/claims/userid"; private string GetIdentity() { string identityName = String.Empty; IClaimsIdentity claimsIdentity = System.Threading.Thread.CurrentPrincipal.Identity as IClaimsIdentity;if (claimsIdentity != null) { // claim foreach (Claim claim in claimsIdentity.Claims) { if (String.Equals(IdentityClaimType, claim.ClaimType, StringComparison.OrdinalIgnoreCase)) { identityName = claim.Value; break; } } } else { identityName = System.Threading.Thread.CurrentPrincipal.Identity.Name; } return identityName; } // Finder public List<Customer> GetAllCustomers() { string id = GetIdentity(); File.AppendAllText(@"C:\MyWebService\log.txt", string.Format("GetAllCustomers: Identity: {0}", id) + Environment.NewLine); return new List<Customer>() { new Customer { CustomerID = 1, CustomerName = "Bob", }, new Customer { CustomerID = 2, CustomerName = "Bill", }, new Customer { CustomerID = 3, CustomerName = "Cheryl", }, }; } // Specific finder public Customer GetCustomerByID(int CustomerID) { string id = GetIdentity(); File.AppendAllText(@"C:\MyWebService\log.txt", string.Format("GetCustomerByID: Identity: {0}", id) + Environment.NewLine); return GetAllCustomers().FirstOrDefault(c => c.CustomerID == CustomerID); } } }
アプリケーションをリビルドします。アプリケーションはインターネット インフォメーション サービスを使用してホストされるので、リビルドしたサービスをアクティブにするために何かする必要はありません。
Web サービスを実行するには、wcftestclient を使用します。
Visual Studio のコマンド プロンプトを起動します。
wcftestclient と入力して、WCF テスト クライアントを実行します。
[ファイル] をクリックし、[サービスの追加] をクリックします。
エンドポイント アドレスとして https://localhost/Customers/Customers.svc と入力し、[OK] をクリックします。
図 3. WCF テスト クライアントにエンドポイント アドレスを入力する
サービスを正常に追加できた場合は、サービスが利用するメソッドが表示されます。
図 4. メソッドが表示される WCF テスト クライアント
GetAllCustomers メソッドをダブルクリックします。要求を構成して呼び出すためのウィンドウが開きます。
[呼び出し] をクリックして、GetAllCustomers メソッドを呼び出します。
図 5. WCF テスト クライアントのデータ
Web サービスを呼び出したら、 C:\MyWebService を参照して、 log.txt を調べます。ログ ファイルは以下のようになります。
GetAllCustomers: Identity: CONTOSO\ericwhite
まとめ
この記事では、クレーム対応 Web サービスを作成し、Business Connectivity Services によって利用するための 4 つの主な手順の 2 つ目を完了しました。WIF を使用して呼び出し元の ID を確認し、その ID をログ ファイルに書き込むコードを追加することによって「WCF: Services for SharePoint 2010 Business Connectivity Services 用 WCF Web サービスのビルド (パート 1/4)」で作成した Web サービスを改良しました。次の記事「WCF: WCF Web サービスと SharePoint 2010 Security Token Service 間の信頼関係の確立 (パート 3/4)」では、Web サービスと SharePoint 2010Security Token Service (STS) の間に信頼関係を確立するための手順に従います。
その他の技術情報
デベロッパー センター: Windows Identity Foundation Developer Center (英語)
ダウンロード: Windows Identity Foundation (英語)
デベロッパー センター: SharePoint 開発者向け技術情報