Windows Phone 7 における Access Control Service の活用 ~ クラウドカバー Episode 49

 

今回紹介する Coud Cover Show は、Windows Phone 7 において Access Conttrol Service (ACS) を利用するためのツールキット、Windows Azure Toolkit for Windows Phone 7 の紹介です。

なお今回も Wade はお休みで、キャプテン アイデンティティこと Vittorio が代打を務めます。

 

 

冒頭、Vittorio がロールを変えて、開発チームに行く、という話が。といっても、引き続きアイディティ関連の技術を担当するようです。

 

ということで、いつものようにまずはニュースから。

 

New Windows Azure Traffic Manager Features Ease Visibility Into Hosted Service Health

Windows Azure 系の技術ブログが統合され、Windows Azure のワンストップ情報源として生まれ変わった(?)Windows Azure ブログ。

その中から、Traffic Manager の機能アップデートに関する情報の紹介です。今回のアップデートにより、Windows Azure ポータルから Traffic Manager の稼働状況(Poll State)の確認ができるようになりました。

小さな更新ですが全体の状況をすぐに把握できるのはうれしいところ。

Traffic Manager は現在 CTP 公開中で、無償で利用いただけます。まだ試されていない方は、「Windows Azure Traffic Manager ~ クラウドカバー Episode 46」あたりもご確認いただき、ぜひお試しください。

 

Rock, Paper, Azure! - The Grand Tournament

image

「Rock、Paper、Azure」は、Windows Azure をつかったゲーム大会です。

ただ、日本からは参加できないのです。残念、、、、

 

 

Hosting Services with WAS and IIS on Windows Azure

Windows Process Activation Services (WAS) を Windows Azure 上で使用するためのセットアップの解説です。

なお、こブログポストのタグである「Adoption Program Insights」は、マイクロソフトのサービス部門の技術メンバーによる執筆シリーズで、今回の筆者 Tom Hollander は Vittotrio、Steve ともに認める素晴らしい技術者です。

 

Porting Node to Windows with Microsoft's Help

最後のニュースは Node.js の Windows へのポーティングに関するニュース。

前回「Node.js、Ruby、Python を Windows Azure で利用する Smarx Role ~ クラウドカバー Episode 48」のテーマの一つであった、Node.js の Windows へのポーティングを、Node.js のコミュニティと Microsoft で行う、というアナウンスが行われました! (前回のポストの最後のほうでも触れていますが、あらためてここでも。)

 

 

さて、本日の本題 Windows Azure Toolkit for Windows Phone 7 のお話。

image

 

Windows Phone 向けのアプリケーションを作成する際に、メンバシッププロバイダーを使用した認証機能を組み込む、というのも一つの方法ですが、Windows Azure の Accecc Control Service を使って、既存の ID プロバイダによる認証をアプリケーションに組み込みましょう、というのが話の主旨。後で出てきますが、今回の Toolkit を利用すると、Live ID、Yahoo!、Google を利用した認証機能を簡単に Windows Phone 7 アプリケーションに組み込むことが可能になります。

 

まずは、Toolkit の基本機能のウォークスルー、ということで、話が進みます。

最初は Windows Azure の管理ポータルで、Access Control の新しい名前空間を作成し、その管理エンドポイントへ飛びます。

image

※ 何気に日本語も選べるようになってうれしい管理ポータル。

 

利用者アプリケーションを確認すると、(あたりまえですが)まだ何もありません。

image

 

 

お次は Visual Studio を立ち上げて、、、

image

※ Visual Studio を素早く立ち上げるおまじないをする Vittorio

 

 

と、その前に、Cloud Cover で Vittorio が紹介している Toolkit の環境の設定方法を少し。

まず、今回の Cloud Cover で使用している Windows Azure (ACS)対応の Windows Phone 7 用テンプレートは、「Windows Azure Toolkit for Windows Phone 7」に含まれるテンプレートです。

まずこれを CodePlex のサイトからダウンロードし、ローカルPCの適切なフォルダに展開してください。

展開先のフォルダを見ると、Readme ファイルが用意されていますので、それを開くとこの Toolkit のセットアップ方法、サンプルの使い方等々の情報があります。で、ここで重要なのが、”Setup and Configuration” の情報。ここに、この Toolkit のセットアップを行うために事前に必要となるソフトウェアの一覧があります。

 

ざっと抜き出すと以下の通り。

  • Microsoft Visual Studio 2010 Professional (or higher) or both Microsoft Visual Web Developer 2010 Express and Microsoft Visual Studio 2010 Express for Windows Phone
  • Microsoft ASP.NET MVC 2 (both the runtime and the project templates for Visual Studio 2010)
  • Windows Phone Developer Tools 7.0 with January 2011 Update ※
  • Silverlight for Windows Phone Toolkit – Feb 2011
  • Internet Information Services 7 (IIS7)
  • Windows Azure SDK 1.4 (March 2011)
  • Windows Azure Tools for Microsoft Visual Studio 2010 (March 2011)
  • Windows Identity Foundation Runtime
  • (Optional) Windows Phone SDK 7.1 Beta2
  • (Optional) Visual Basic for Windows Phone Developer Tools RTW

※ 事前に Windows Phone Developer Tools 7.0 のインストールが必要です

※ 最後の2つの Optional の製品はインストールしなくともOKです(私は今回インストールしていません)。

 

これらをインストール後、Readme ファイルと同じフォルダに入っている Setup スクリプトを起動すると、Toolkit のセットアップウィザードが立ち上がり、セットアップを実行できるようになります。なお、このセットアップにおいて、依存コンポーネント(上記で挙げた、事前に必要なソフトウェア)のチェックをしてくれますので、インストール忘れとかがあっても安心です  :-)

 

image

 

 

なお、事前に必要なソフトウェアとして、「Visual Studio 2010 の Proffesional 以上」、もしくは「Visual Web Developer 2010 Express と Visual Studio 2010 Express for Windows Phone の両方」となっています。Express を使用する場合、クラウド開発は VWD で、Phone 開発は VS for Phone で、という切り替えが必要になりますのでご注意を。

VS2010 Professional (以上)をお持ちでない場合は、この機会に VS 2010 Ultimate もしくは Professional の評価版をおためしいただければ幸いです。

 

ということで、セットアップが終了したら、Visual Studio 2010 を立ち上げて、新規プロジェクトの作成を選択すると、、、、今回の Toolkit に含まれるテンプレートが出てきます。

image

 

 

Cloud Cover 本編でも、Vittorio が、Visual Studio で Windows Phone 7 Cloud Application のテンプレートを選択して、設定を行っていくので、引き続き追ってみましょう。

まず、ウィザードの最初の入力ですが、今回はローカルのストレージ エミュレーターを選択。

image

 

ウィザードの次のページでは、今回の WP7 アプリで使用する認証方法の選択を行います。ASP.NET のメンバシップによる認証と、ACS による認証がありますが、もちろん、ACS を選択。

すると ACS を使用するために必要な名前空間と、管理キー(Management Key) を入力するテキストボックスが出てきますので、そこに必要な情報を入れましょう。

 

image

 

 

なお、この際に、右側に出てくる青い文字のリンクをクリックすれば、それぞれの入力に関する説明を行った Web ページを表示することができます。

ACS の情報は、上述した管理エンドポイント(https://名前空間.accesscontrol.windows.net/) にアクセスして立ち上がる ACS の管理ポータルから取得します。ACS 管理ポータルで、”管理サービス” を選択後、”ManagementClient” のリンクをたどって出てくる資格情報の “対称キー” のリンクをたどると、、、

image

 

以下のようなページが表示され、資格情報が確認できます。

image

 

さて、この資格情報は、ACS の管理サービスアクセス用の重要な情報ですので、厳密に管理をお願いします。

Cloud Cover でも、Vittorio の資格情報は下記のように隠されています :-) (上記のスクリーンショットにおける資格情報のキーについても本来の情報を少し修正しています)。

image

 

必要な情報を入力し、ウィザードを終了すれば、Windows Phone 7 用のテンプレートに基づくソリューションが生成されます。

 

同時に ACS の管理ポータルでも、今回作成したアプリケーションが、証明書利用者アプリケーションとして登録されているのが確認できます。

image

 

さて、いよいよデバッグ実行を、と思うのですがその前にローカルのIIS でポート443 と 10080 が使用されていないか確認してください。これらのポートを使用している Web アプリがある場合は一旦停止しておきましょう。

image

 

また、Cloud Cover の中では、少しあとでこの設定を行っていますが、Silverlight for Windows Phone Project のターゲットを、”Windows Phone 7 Emulator” に変更しておきましょう。

image

 

 

準備ができたなら、ソリューション エクスプローラーで Windows Azure のプロジェクトを選択し、右クリックで出てくるメニューから、「デバッグ」—>「新しいインスタンスを開始」を選択。

image

 

しばらくするとブラウザが立ち上がるので、「このサイトの閲覧を続行する(推奨されません)」を選択すると、、、

image

 

今回のアプリケーションの管理者用画面が表示されます。

image

 

 

この状態(Azure プロジェクトがデバッグ実行されている状態)で、引き続き Windows Phone プロジェクトのインスタンスを開始します。

 

image

 

するとほどなく Windows Phone 7 のエミュレータが立ち上がり、以下のようなログイン画面が表示されます。

image

 

この画面が出たら、右下にある証明書のインストール(Install Certificate) のリンクをクリックし、このサイトの証明書をインストールします。

image

 

 

証明書のインストールが終わったら、次はログイン。

Cloud Cover では、Live ID、Yahoo!、Google の Identity Provider(IP)の中から、Live ID を選択し、既存の Live ID での認証を行っています。

image

 

引き続き、Cloud Cover では、ユーザー情報の入力として、名前とメールアドレスの入力を行っています。

image

 

これは、Live ID の認証では、認証後にアプリケーションに対してメールアドレス等の情報を公開していないため。

 

Yahoo! や Google での認証を行うと、「今回使用している ACS (私の場合は、CloudCover-wp7-id.accesscontrol.windows.net)から、メール情報(アドレスとユーザー名)の情報を求められているが渡していいか」、という感じの確認画面が表示されます(画面は Google の場合のものですが、Yahoo! でもほぼ同様です)。

image

 

 

これを許可すると、Cloud Cover 同様の Register 画面が出るのですが、すでにユーザー名と、メールアドレスが埋まった状態の画面が表示されます(前述したとおり、Live ID の場合は、セキュリティ上の理由でこれらの情報を渡さない設定になっています。どちらのほうがよいかはケースバイケースということで)

image

 

さて、これで今回の Toolkit で提供されるソリューション テンプレートの基本部分のウォークスルーは終了です。

引き続き、今回の認証の仕組みを OneNote を使いながら解説。

 

今回登場するのは3つのソフトウェア(サービス)。

左上が Access Control Service、左下が、WP7 のアプリケーション(Silvelight アプリケーション)、そして、右上が WP7 アプリケーションにサービスを提供する Web アプリケーション(Windows Azure 上のサービス)。

image

 

 

最初に WP7 アプリケーションを立ち上げると、ユーザー認証が行われていない、という状態を認識して、ACS に対して、Identity Provider (IP)のリストを要求します。すると、ACS は今回使用する IP のリストを返します(OneNote 上、および WP7 エミュレーターで黄色の枠囲みみをしている箇所)

image

 

ユーザーが表示された IP のリストから、認証に使用する IP (今回は Google)を選択すると、アプリケーション中に埋め込まれた Browser Control を使用して、Google のアカウント認証画面を表示します(青色の枠囲みの部分)。

image

 

Google での認証が終わると、セキュリティトークン(クレーム)が WP7 アプリケーションに返され、WP7 アプリケーションはそれを ACS に対して提出します(下記の画面では、赤色の丸で描かれているもの)。

すると、ACS はあらかじめ定義されている変換ルールに基づき、今回の WP7 アプリケーションで使用可能なクレームの形式に情報を変換し、WP7 アプリケーションに渡します(同じく、緑色の丸で描かれているもの)。

image

 

この変換のルールは、ACS の管理ポータルの「規則グループ」にて、また ACS がアプリケーションに渡すトークンの形式は「証明書利用者アプリケーション」の項目から設定可能です。

image

 

さて、アプリケーションでは受け取ったトークン(今回は SWT 形式のトークン)を、Browser Control から受け取り、Isolated Storage に保存します。

image

 

これにより、今後 Windows Azure 上のサービスにアクセスする際には、Isolated Storage からトークン情報を読み出して、サービスへ渡すことが可能になります。

また、サービス側では Windows Identity Foundation(WIF)を利用し、このトークン情報に基づいて適切なサービス提供を行うことになります。

image

 

 

 

以上で、今回の本題は終了です。

ということで、Tip Of the Week。

image

 

今回の Tip は、https://windowsazure.com/events の紹介。

これは Windows Azure 関連のイベント情報を紹介するページで、マイクロソフトの社員や、MVP の方などが関連している Windows Azure のイベントを紹介しています。情報については、今後徐々に増える予定のようです。

image

 

中にはストリーミングが提供されているイベントや、Webcast として公開されている情報もありますのでお役立てください。

 

 

以上でクラウドカバー Episode 49 の紹介は終了です。

 

それでは!