【WP/Azure for ITPro】Windows Phone から Windows Azure AppFabric ACS を使用する
※この投稿は Windows Azure Advent Calender に参加しています
Windows Phone で Windows Azure AppFabric Access Control Service からセキュリティトークンを受け取るにはためには、面倒なコードを書く必要があります。でも安心してください。うってつけのライブラリがあります。
必要なソフトウェアは以下の2つです。
Windows Phone SDK は Windows Phone アプリの開発環境なので、ここでの説明はよいでしょう。
■Windows Phone 用 ACS コントロールの準備
重要なのは、Windows Azure Platform Training Kit(WAPTK) です。WAPTK を解凍すると、C:\WAPTK 配下に自習用のラボファイルが作成されます。この中に、Windows Phone 用のライブラリが用意されてます。
以下のフォルダが、Windows Phone 用の ACS用ライブラリです。
C:\WAPTK\Labs\ACS2andWP7\Source\Assets\SL.Phone.Federation
Visutal Studio 2010 Express for Windows Phone(Windows Phone SDK をインストールすると一緒にインストールされます)で、上記フォルダの直下にある SL.Phone.Federation.csproj を開いてください。
開いたらソリューションエクスプローラーでプロジェクト名を右クリックし、「Windows Phone 7.1 にアップグレード」を選択します。これにより、Windows Phone 7.1 OS に合ったプロジェクトに変換されます。
ソースは何もいじらずに、ビルドしちゃいましょう。
ビルドした結果が、C:\WAPTK\Labs\ACS2andWP7\Source\Assets\SL.Phone.Federation\Bin\Debug の下に、SL.Phone.Federation.dll というファイル名で作成されます。
これは後で使います。
■ AppFabric ACS の準備
Windows Azure の管理コンソールから、AppFabric ACS 管理コンソールを開きます。
もし名前空間を作成していなければ、[新規作成] をクリックして作成してください。作成した名前空間は後から使用するので覚えておいてください。
名前空間が作成できたら、作成した名まえ空間を選択し「アクセス制御サービス」をクリックします。
名前空間の環境設定画面が開くので、はじめに ID プロバイダーを選択します。今回は、Google と Windows Live を使用することにしましょう。
次に、「証明書利用者アプリケーション」をクリックしてください。
[追加]ボタンをクリックし、必要な情報を埋め込みます。今回は以下のように指定しました。
領域(Realm):uri:techfielders
戻り先URL:https://tf.com/
トークン形式:SWT
上記の画面で重要なのが、領域です。この値は後からアプリに埋め込むので間違えないでください。uri: 以降は適当な値を指定して大丈夫です。uriを指定する以外に、https://tf.com/ 等アプリのURLで指定することも可能です。もしアプリケーションを作成しているならば、それに合わせたURIを指定しますが、今回は作成していないので適当に指定しました。動作検証上は何の問題もありません。
戻り先URLも適当な値で大丈夫です。この値はセキュリティトークンの発行先となりますが、これを指定しないとセキュリティトークンは発行されません。
トークン形式は、今回はSWT(Simple Web Token)を選択しました。
次に規則グループを作成します。
管理画面の左側のメニューで「規則グループ」をクリックしてください。
[追加]をクリックすると規則グループの名前を入力する画面が表示されるので、testrule などと適当に入力して[保存]をクリックします。
以下の画面が表示されたら、[生成]をクリックします。
以下の画面で IDプロバイダーを選択して、「生成」ボタンをクリックすると、ルールが自動的に生成されます。
最後に、必ず「保存」してください。
もう一度「証明書利用者アプリケーション」を開き、下のほうにある「規則グループ」で先ほど作成したルールを選択し、保存します。
最後に、トークンを署名するためのキーを作成します。
管理画面の左側のメニューから「証明書およびキー」をクリックしてください。
以下の画面が開くので、対称キーを選択して、キーを生成します。このキーを使用してセキュリティトークンを暗号化します。
最後に保存してACSの設定は完了です。
後で以下の2つの情報を使用します。
- 作成した名前空間(ここでは testapp)
- 領域(ここでは uri:techfielders)
■Windows Phone から ACS にアクセスするアプリの作成
Visual Studio を起動し、[新しいプロジェクト」を選択し「Silverlight for Windows Phone」を選択してください。
テンプレートの種類は「Windows Phone アプリケーション」でよいでしょう。
プロジェクトの名前は何でもOKです。
プロジェクトが開いたら、「参照の追加」で先ほど作成したライブラリを読み込みましょう。今回はこれ以外に追加するライブラリはありません。
コードを細かく解説する時間とスペースが無くて恐縮なのですが、以下にサンプルプロジェクトをアップロードしてありますので参考にしてください。ライブラリも含めてあるので、ひとまずこのプロジェクトだけでテストすることが可能です。
1点だけ、ACS の環境に合わせて変更しなければならないのが App.xaml です。
App.xaml の Application.Resource に、ACS の名前空間(Namespace)と領域(Realm)を指定している部分があります。ここは先に作成した ACS の環境に合わせて修正してください。
以上を修正して実行すれば以下のように IDプロバイダーの選択画面が開きます。
グーグルを選択すれば、グーグルのモバイルログオン画面が開きます。
正しく認証されると、以下のようにSWTがメッセージボックスで開くようにしてあります。
OKをクリックすると、クレームタイプとクレームの値を表示します。
是非試してみてください。