Windows Phone + Active Directory の3回目です。過去の投稿は以下より。
2011年11月28日 Tech Fielders セミナー 「Windows Phone に認証機能を実装する」で使用した資料、ソースコードは以下からどうぞ。当日の収録動画もあります。 2011/11/28 セミナー資料 Windows Phone アプリケーションに認証機能を実装する
前回までの投稿で AD FS を含めたテスト環境は整ったかと思います。今回はWPアプリへの認証機能の実装について振れるわけですが、その前にやらなければいけないことがあります。それは、AD FS と通信するためのライブラリの準備です。
前回までの投稿で書いたとおり、Windows Phone には System.DirectoryService が実装されていません。そのため、AD DS(Active Directory Domain Service)に対して直接認証を依頼することができません。そのために、Windows Phone と AD DS の間に AD FS を挟むわけです。
しかし、AD FS と通信するためには、WS-Trust というプロトコルを使用する必要があり、これを一からコーディングしていたのでは日が暮れてしまいます。そこで、既存のライブラリを使えないだろうか...と調べたところ、以下のようなすばらしい事例がありました。
要は、Identity Developer Training Kit 2010 April で提供されているデスクトップ PC の Silverlight 用ライブラリを流用させてもらう!というものです。具体的にどうするか...以下に記します。
■ 準備
Identity Developer Training Kit 2010 April をダウンロードして展開しておいてください。規定では、C:\IdentityTrainingKitVS2010 に展開されるはずです。 この中の C:\IdentityTrainingKitVS2010\Labs\SilverlightAndIdentity\Source\Assets\SL.IdentityModel が Silverlight 用のライブラリです。これを、ほぼそっくりそのまま Windows Phone に移行します。
Identity Developer Training Kit 2010 April をダウンロードして展開しておいてください。規定では、C:\IdentityTrainingKitVS2010 に展開されるはずです。
この中の C:\IdentityTrainingKitVS2010\Labs\SilverlightAndIdentity\Source\Assets\SL.IdentityModel が Silverlight 用のライブラリです。これを、ほぼそっくりそのまま Windows Phone に移行します。
■移行するファイル
移行といっても大した話ではありません。必要なソースコードをひたすらコピペするだけです。コードの書き換えなど一切必要ありません。 まず、C:\IdentityTrainingKitVS2010\Labs\SilverlightAndIdentity\Source\Assets\SL.IdentityModel 配下にある SL.IdentityModel.csproj を Visual Studio で開いてください。 ソリューションエクスプローラーには以下のように沢山の.csファイルが並んでいます。この中から必要なものだけを移行します。必要なファイルは配下の通りです。 Claims 配下の全て Claim.cs ClaimCollection.cs ClaimsIdentity.cs ClaimsPrincipal.cs ClaimType.cs IClaimsIdentity.cs IClaimsPrincipal.cs Protocols\WSTrust 配下の全て IRequestCredentials.cs IssueCompletedEventArgs.cs IssuedTokenHeader.cs IWSTrustContract.cs RequestedSecurityToken.cs RequestSecurityToken.cs RequestSecurityTokenResponse.cs UsernameCredentials.cs WindowsCredentials.cs WSTrust13Constants.cs WSTrust13ResponseSerializer.cs WSTrustBinding.cs WSTrustBindingUsernameMixed.cs WSTrustBindingWindows.cs WSTrustClient.cs WSTrustRequestBodyWriter.cs WSTrustSerializationHelper.cs Services 配下の以下のファイル TokenCache.cs
移行といっても大した話ではありません。必要なソースコードをひたすらコピペするだけです。コードの書き換えなど一切必要ありません。
まず、C:\IdentityTrainingKitVS2010\Labs\SilverlightAndIdentity\Source\Assets\SL.IdentityModel 配下にある SL.IdentityModel.csproj を Visual Studio で開いてください。
ソリューションエクスプローラーには以下のように沢山の.csファイルが並んでいます。この中から必要なものだけを移行します。必要なファイルは配下の通りです。
Claims 配下の全て
Protocols\WSTrust 配下の全て
Services 配下の以下のファイル
上で、移行は「コピペ」でよいと書きましたが、ITPROの方には意味が分からないかもしれませんので具体的に書いておきます。
■移行先となるプロジェクトの作成
Visual Studio 2010(Express for Windows Phone でも、もちろんOK)を起動してください。 [新しいプロジェクト] から [Windows Phone クラスライブラリ] を選択します。プロジェクトの名前は「WP_IdentityModel」などの和解りやすい名前にしておきましょう。 プロジェクトが作成されると、以下のような画面が開きます。 画面の右側に「ソリューションエクスプローラー」というウィンドウがあり、その中に既定の「Class.cs」というファイルが作られています。これは必要ないので削除してしまいましょう。 次に、[参照設定]を右クリックして[参照の追加]を選択し、以下の3つのライブラリを追加してください。 System.Runtime.Serialization System.ServiceModel System.Xml.Linq
Visual Studio 2010(Express for Windows Phone でも、もちろんOK)を起動してください。
[新しいプロジェクト] から [Windows Phone クラスライブラリ] を選択します。プロジェクトの名前は「WP_IdentityModel」などの和解りやすい名前にしておきましょう。
プロジェクトが作成されると、以下のような画面が開きます。
画面の右側に「ソリューションエクスプローラー」というウィンドウがあり、その中に既定の「Class.cs」というファイルが作られています。これは必要ないので削除してしまいましょう。
次に、[参照設定]を右クリックして[参照の追加]を選択し、以下の3つのライブラリを追加してください。
■移行
手順は単純です。 新しく作成したプロジェクトに、元のプロジェクトと同じファイル名でクラスライブラリ(.cs ファイル)を1つずつ作成し、ソースコードをコピペするだけです。 今回は、処理を見失わないように元のプロジェクトの構造を踏襲することにします。よって、以下のように、SL\IdentityModel\Claims、Protocols\WSTrust、Services というフォルダを作成してください。それぞれのフォルダの配下に、もとのソースコードを移行することにします。 まずは1つ目、Claim.cs から。 元の SL.IdentityModel プロジェクトで、Claimsフォルダ配下の Claims.cs ファイルをダブルクリックして開き、ソースコードを丸ごとコピーします。コメントとか、using とかいっさいに気にせず、丸ごとコピーしてください。 次に、新しく作成したプロジェクトで、Claimsフォルダ配下に、新しいクラスを「Claims.cs」というファイル名で作成します。 作成した Claims.cs ファイルに、先ほどコピーしたソースコードを丸ごと上書ペーストします。丸ごとでOKです。 この作業を、移行対象のファイル全てに対して行います。 所用時間、約10分です。 移行中、参照エラーが出たりしますが、一切気にしないで下さい。移行していないクラスに対する参照でエラーが出ているだけで、移行が完了した段階できれいさっぱりクリアになっています。 移行が終わったら、念のためにビルドしてみてください。エラーが出なければ移行は完了です。 もしエラーが出ているときには、移行し忘れか、ペーストミスがあるはずです。 そうしてできたのが、このライブラリ(WS-Trust クラスライブラリ)です。
手順は単純です。
新しく作成したプロジェクトに、元のプロジェクトと同じファイル名でクラスライブラリ(.cs ファイル)を1つずつ作成し、ソースコードをコピペするだけです。
今回は、処理を見失わないように元のプロジェクトの構造を踏襲することにします。よって、以下のように、SL\IdentityModel\Claims、Protocols\WSTrust、Services というフォルダを作成してください。それぞれのフォルダの配下に、もとのソースコードを移行することにします。
まずは1つ目、Claim.cs から。
元の SL.IdentityModel プロジェクトで、Claimsフォルダ配下の Claims.cs ファイルをダブルクリックして開き、ソースコードを丸ごとコピーします。コメントとか、using とかいっさいに気にせず、丸ごとコピーしてください。
次に、新しく作成したプロジェクトで、Claimsフォルダ配下に、新しいクラスを「Claims.cs」というファイル名で作成します。
作成した Claims.cs ファイルに、先ほどコピーしたソースコードを丸ごと上書ペーストします。丸ごとでOKです。
この作業を、移行対象のファイル全てに対して行います。
所用時間、約10分です。
移行中、参照エラーが出たりしますが、一切気にしないで下さい。移行していないクラスに対する参照でエラーが出ているだけで、移行が完了した段階できれいさっぱりクリアになっています。
移行が終わったら、念のためにビルドしてみてください。エラーが出なければ移行は完了です。
もしエラーが出ているときには、移行し忘れか、ペーストミスがあるはずです。
そうしてできたのが、このライブラリ(WS-Trust クラスライブラリ)です。
以上で必要なライブラリもそろいました。
次は実際に AD FS で認証を受けるためのコーディングです。
つづき(その4 完結編)へ
認証機能に関するセミナーでパスワードなどはProtectedDataを使って暗号化して保存するというお話がありましたが、ProtectedDataクラスはどのようなアルゴリズムを使用しているのでしょうか?
データベースの暗号化についてはMSDNにAES-128を使用しているという記述がありましたが、ProtectedDataについてはそのような記述が見つかりませんでした。
米国等の輸出規制の問題で使用しているアルゴリズムの情報が必要なので、ProtectedDataが使用している暗号化アルゴリズムについて教えて頂けないでしょうか?