2011年11月28日 Tech Fielders セミナー 「Windows Phone に認証機能を実装する」で使用した資料、ソースコードは以下からどうぞ。当日の収録動画もあります。 2011/11/28 セミナー資料 Windows Phone アプリケーションに認証機能を実装する
前回の続きです。
【WP for ITPro】Windows Phone から直接 Active Directory 認証を行うには ~その1
今回は、Windows Phone から AD FS を介して AD DS に認証を受けるためのアプリケーションを開発するための手順について解説します。
1. 必要な環境について
これから紹介する仕組みを実装するには、少なくとも以下の環境が必要です。ちょっと面倒ですが頑張ってください。
2.Windows Server の準備
必要な環境を構築しましょう。いちから作るのは大変ですが、それもまた楽し! 今回は、ドメインコントローラーと同じサーバーに AD FS をインストールするものとします。
3. Windows 7(開発環境)の準備
Windows 7 は開発環境であり、Windows Phone Emulator の動作検証端末でもあります。既に書いた通り、仮想環境上では Windows Phone エミュレーターが正常に動作しませんので、かならず物理環境にインストールしてください。
4.サンプルプロジェクトを用意する
以上が全てインストールされたら準備完了です。
Visual Studio が起動出来たら、以下のサンプルプロジェクトを読み込んで実行してみてください。もちろん、サーバー名とかユーザーIDは変えてください。詳しくは次回の投稿で解説します。
Windows Phone から AD FS にアクセスするためのサンプルプロジェクト
つづき(その3)へ
ちょっと面倒な証明書のお話し。
■標準で実装されているルート証明書
Windows Phone に標準で実装されているルート証明書は以下の通りです。
※詳細は SSL Root Certificates for Windows Phone
これ以外の発行者による証明書は、自分自身で Windows Phone デバイスや Windows Phone エミュレーターにインストールする必要があります。自己証明証明書の場合も同様です。
なお、PC の場合には、SSLサイトにアクセス後、ブラウザ等から直接証明書をインストールすることができます。しかし、Windows Phone の場合にはそれができません。もちろん、Active Directory で配布...なんてこともできません。つまり、何らかの配布方法を考慮する必要があります。
ルート証明書を自分自身で Windows Phone にインストールするには、以下の2通りの方法が考えられます。
いずれの方法を使用してもよいのですが、特定のアプリケーションが使用する場合には、アプリケーションの中でインストールできるようにしておいたほうが、利用者にとって分かりやすいと思います。インストール忘れによるトラブルも減るでしょう。
■簡単な自己署名証明書の作成方法
※クラウド上のインスタンスなど、任意の主体名を持った自己署名証明書を作成する方法は以下にまとめてあります 【Azure for ITPRO】自己署名証明書を作成する
ちなみに、IIS がインストールされている環境で、自分自身の自己署名証明書を作成するには、IIS の管理コンソールでサーバーを選択し、「サーバー証明書」を開きます。
次に、右側のアクションペインから「自己署名入りの証明書の作成」をクリックします。
証明書のフレンドリ名を聞かれるので、識別しやすい名前を入力すれば完了です。
作成された自己署名証明書は、自動的にサーバーにインストールされます。
■作成した自己署名証明書をエクスポートする
Windows Phone に自己署名証明書をインストールするには、サーバーにインストールされた自己署名証明書をファイルに保存する必要があります。もちろん、WEBに掲載したり、メールに添付するためです。
証明書は以下のいずれかの形式でエクスポートすることができます。
証明書をエクスポートするには、証明書エクスポートウィザード を使用します。
まずは、IIS の管理コンソールの「サーバー証明書」で、エクスポートしたい証明書をダブルクリックして開きます。
以下のように証明書が開くので、真ん中の「詳細」タブを開き、「ファイルにコピー」をクリックしてください。
ここで、「秘密キーをエクスポートしない」を選択すると、以下の通り「.p7b」「.cer(DER Encoded Binary X.509)「.cer(Base64 Encoded X.509)」の3種類から選択することができます。
一方、「秘密キーをエクスポートする」を選択した場合、以下のように pfx 形式しか選択することができません。
いずれの形式でエクスポートするかは用途によって異なりますが、WEBサービスのサーバー証明書として Windows Phone にインストールする場合には .cer または .p7b 形式を選択してください。
■留意点
Windows Phone に自己署名証明書をインストールしようとした場合、電子メール添付とWEBサイトとで、インストールできる証明書の種類が異なります。これが意図的なものであるのかどうかについては現在調査中ですが、とりいそぎ、以下の通りまとめておきます。ご注意ください。
開発者にとって何が面倒って、開発環境を準備することほど面倒なことはありません(なんてことは言っちゃいられないのでしょうけど)。特に、インフラ系の知識を多分に要求されるようなものは面倒です。
現在、Windows Phone から Active Directory Federation Service(AD FS) にアクセスして、AD 認証するためのアプリケーションについて解説する記事を書いているのですが(追ってアップします)、それに先立ち AD FS 2.0 のセットアップ手順をまとめました。
面倒な技術解説とか、そんなものは一切省いてあります。
とりあえず、「アプリからアクセスして結果が得られる」ことだけを目的にしたものです。なので、Windows Phone アプリ開発者だけでなく、A FS 入門者にも広く使っていただけると思います。クレームルールについては、少し詳しく解説してあります。
以下の SlideShare サイトからダウンロードしてください。
SlideShare – Windows Phone アプリ開発者のための AD FS 2.0 セットアップ手順
AD FS や AppFabric ACS をじっくり勉強したい、そしてクラウドアプリとの連携についてテストしてみたい!という方は以下を参照してください。300ページあります。
Windows Phone に業務アプリケーションをインストールして使用する場合、業務アプリケーショにはなんらかの「認証」の仕組みが実装されている必要があります。もちろん、社内にはきちんと管理された認証基盤が設置されているという前提です。例えば Active Directory ですね。
ここで業務サービスの構成について簡単にまとめておきます。考慮しなければならないのは大きく分けて以下の2点です。
業務サービスの場所については言わずもがなですね。社内認証基盤との通信経路が確保されているかどうかが重要な課題になります。オンプレミスの業務サービスであれば通信経路の心配は必要ありませんが、クラウドに存在する場合には何らかの方策を検討する必要があります。
そこで使えるのが、IT Pro の皆さんにはおなじみ「Windows Azure Connect」です。Windows Azure Connect を使用することで、Windows Azure 上のインスタンスは社内 Active Directory ドメインと通信することができるようになります。必要であれば、AD ドメインに参加することだって可能です。
※ Windows Azure Connect の使い方は IT Pro (IT 担当者) のための Windows Azure Platform 運用管理ガイド 1.0 へ!
業務サービス側が社内 AD での認証を行ってくれれば、Windows Phone アプリケーション側には認証に関するロジックを実装する必要はありません。せいぜい、ユーザーIDとパスワードを入力するためのダイアログボックス程度です。Windows Phone 側のアプリケーションが IE9 であれば、それさえも必要なく、認証が必要になると以下のようなポップアップが表示されます。
では、Windows Phone から直接 Active Directory で認証したい場合はどうしましょう?
あまり大きな声では言えませんが、現時点で Windows Phone は System.DirectoryServce をサポートしておらず、Active Directory ドメインに参加したり、Active Directory ドメインに直接認証を依頼することが事実上困難な状況です。
では、全く道が無いかといえばそうでもなく、Windows Phone アプリケーションと Active Directory の間に「認証代行サービス」的な仲介役を設置すれば何とかなります。つまり、認証代行サービスがユーザーIDとパスワードを受け取り、裏で AD認証を行い、結果を Windows Phone アプリに返してくれる...といったものです。
いま「えぇ、作るのぉ~」とげんなりした方、安心してください。Active Directory Federation Service という強い味方がいるじゃないですか!すなわち、以下のようなイメージです。
AD FS は、何もパッシブな WEB SSO だけで使用するものではありません。WS-Trust というプロトコルを使用して、アクティブな認証をすることだってできるのです。
次回は Windows Phone アプリから AD FS にアクセスするための環境構築について解説します。
つづき 【WP for ITPro】Windows Phone から直接 Active Directory 認証を行うには ~その2
Windows Phone には Office Hub というソフトウェアが実装されており、SharePoint(オンプレミスおよび Office 365)と SkyDrive に接続してデータを取りだしたり保存することができます。以下の図は Office Hub と周辺サービスとのデータ交換の様子を図にしたものです。
Windows Phone が社外ネットワーク上にある場合には、Forefront Unified Access Gateway を使用して社内の SharePoint Server にアクセスすることができます。残念ながら、現時点では UAG 以外のゲートウェイがサポートされていません。
ひとまず、標準では上記以外のデータストアにアクセスすることができません。
でも、「ファイルサーバーにアクセスしたいのよっ!」と考えるのが人情ってものです。
Windows Phone から Windows のファイルサーバーに接続するためのパスは、以下の通りいくつか考えらえます。
いずれにしても、それぞれのプロトコルにアクセスするためのアプリケーションを開発しなければなりません。開発を避けるには Marketplace からアプリケーションを購入する必要があるわけですが、Windows Phone の日本語版マーケットプレースを見てみると、FTPクライアントは見当たりますが、smb に直接アクセスしたり、WebDavにアクセスするためのアプリケーションは見当たりません。
アプリケーションを購入するにせよ、自作するにせよ、スマートフォンの利用シーンは社外であることが多いはずですから、インターネットから接続できるパスを用意する必要があります。
そこで、例として以下のような仕組みを考えてみましょう。
環境を簡単に解説すると以下の通りです。
■ オンプレミス
■クラウド(Windows Azure)
■ Windows Phone
開発したのはサンプルは、Azure 上にホストする WCF サービスと、Windows Phone 用のブラウジングアプリです。
どうです?なんとなくつながる気がしませんか?MVP の normalian 氏からは、「海外のデータセンター経由かぁ」と難色を示されてしまいましたが...。エヘヘ。
実際に上記の図を実装したアプリケーションを作ってみました。
以下の画面に表示されているのは WCFサービスに渡すためのパラメタです。WEBDAVサーバーという設定値がありますが、このサーバーに直接接続するわけではなく、この値をユーザーIDとパスワードとともに、Azure 上にホストした WCF サービスに渡します。ユーザー ID とパスワードはオンプレミスにある Active Directory に登録されているものです。
上記の値を受け取った WCF サービスは、Windows Azure Connect で接続されたオンプレミスの WebDav サーバーに接続し、フォルダ一覧を取得してきます。まだアクセス権等の実装を何もしていないので、以下の画面では全フォルダを持ってきています。
いちおう、ファイルとフォルダは別々のアイコンで表示できるようにしてみました。
ファイルを選択してダウンロードボタンをタップすると、ファイルをダウンロードすることができます。
以下は、PPT をダウンロードして開いたところです。
ファイルのアップロード等は実装していませんが、そこそこ便利に使えるかなと思います。
ソースを整理次第、ここでご紹介します。
Windows Phone 単体では限界もありますが、Azure と組み合わせると利用の幅が広がりますね~。
<つづく>
この投稿は以下の記事を参考にしています。
Backup your Windows Phone Isolated Storage data to SkyDrive using Live Connect API « Niko Vrdoljak's Blog ※上記の記事はいろいろ参考になりますので、英語が我慢できるかたは是非ともご覧ください
前回は Windows Phone アプリから Windows Live で認証するサンプルをご紹介しました。
【WP for ITPro】Windows Phone アプリから Windows Live で認証するサンプル
恥ずかしながら、その後 Live SDK(プレビュー版)で SignInButton Control が提供されていることに気づきました。こちらを使用したほうがはるかに実装が楽なので、今回は SignInButton Control を使用したサンプルをご紹介します。
Signin Control には OAuth 2.0 のハンドラーが実装されているため、前回の投稿のように ブラウザーコントロールを使用してリダイレクトを独自にハンドリングする必要がありません。そのため、大変シンプルにコードを実装することができます。超楽です。
コードに興味のない IT Pro の皆さんは、「こんな実装が可能なんだ」ということだけでも把握していただけると幸いです。
1. SDK のダウンロード
Microsoft Connect のサイトで、Live SDK ベータ版をダウンロードしてください。 http://connect.microsoft.com/site1226 ダウンロードしたファイルには LiveSDK.msi が含まれているので、こいつをインストールします。
Microsoft Connect のサイトで、Live SDK ベータ版をダウンロードしてください。
http://connect.microsoft.com/site1226
ダウンロードしたファイルには LiveSDK.msi が含まれているので、こいつをインストールします。
2. Windows Live 開発者サイトでアプリケーションを登録
以下のサイトに移動してアプリケーション登録を行い、Client ID を取得します。 https://manage.dev.live.com/Applications/Index?wa=wsignin1.0 登録の手順を簡単に書いておきます。 My Apps サイトで画面の右側にある「Create Application」をクリックしてください。 アプリケーション名を「適当に」入力し、言語として「Japanese」を選択します。ここで入力したアプリケーション名は、ユーザーにアクセス認可を受ける際に表示されるので注意してください。入力したら「I accept」をクリックします。 登録が完了すると、以下のように Client ID が表示されます。これは、あとでアプリケーションに埋め込む必要があるので控えておいてください。Client ID を控えたら、「Appication Setting Page」をクリックます。 Settings ページが表示されるので、「API Settings」タブをクリックし、「Mobile client app」を 「yes」 に設定してください。必ず「Save」をクリックして保存しましょう。 以上で設定は完了です。
以下のサイトに移動してアプリケーション登録を行い、Client ID を取得します。
https://manage.dev.live.com/Applications/Index?wa=wsignin1.0
登録の手順を簡単に書いておきます。
My Apps サイトで画面の右側にある「Create Application」をクリックしてください。
アプリケーション名を「適当に」入力し、言語として「Japanese」を選択します。ここで入力したアプリケーション名は、ユーザーにアクセス認可を受ける際に表示されるので注意してください。入力したら「I accept」をクリックします。
登録が完了すると、以下のように Client ID が表示されます。これは、あとでアプリケーションに埋め込む必要があるので控えておいてください。Client ID を控えたら、「Appication Setting Page」をクリックます。
Settings ページが表示されるので、「API Settings」タブをクリックし、「Mobile client app」を 「yes」 に設定してください。必ず「Save」をクリックして保存しましょう。
以上で設定は完了です。
3.サンプルコードのダウンロード
コーディングは非常にシンプルなのですが、サンプルを用意しました。いかからダウンロードしてください。 Signin Control を使用したサンプル サンプルコードを展開したら、LiveConAuthWithSignInControl.sln を Visual Studio 2010 で開いてください。Visual Studio をお持ちでない ITPRO の方は、こちらから Visual Studio 2010 Express for Windows Phone をダウンロードすることができます
コーディングは非常にシンプルなのですが、サンプルを用意しました。いかからダウンロードしてください。
Signin Control を使用したサンプル
サンプルコードを展開したら、LiveConAuthWithSignInControl.sln を Visual Studio 2010 で開いてください。Visual Studio をお持ちでない ITPRO の方は、こちらから Visual Studio 2010 Express for Windows Phone をダウンロードすることができます
4.参照設定の追加
※サンプルコードには既に参照設定が追加されているので改めて設定する必要がありません 先にインストールして Live SDK に含まれている Signin Contorlを使用するには、2つのライブラリを参照に追加する必要があります。 ソリューションエクルプローラーの「参照設定」を右クリックし、「参照の追加」を選択してください。 .NET タブに「Microsoft.Live.Controls」と「Microsoft.Live」という2つのコンポーネントがあるので、これらを選択して「OK」をクリックします。 これで、Live SDK を使用することができるようになりました。 次に、Signin Control を使えるようにします。 画面右側にある「ツールボックス」を開き、「全般」を右クリックして「アイテムの選択」をクリックします。 以下のようにツールボックスアイテムの選択画面が開くので、「Windows Phone コンポーネント」タブから、「SigninButton」を選択してください。こいつが、OAuth 2.0 をハンドリングしてくれるコントロールです。使わなきゃ損です。 ソリューションエクスプローラーで、「Mainpage.xaml」をダブルクリックし、デザイン画面を開いてください。この状態で、「ツールボックス」の「全般」に以下のように「SignInButton」が表示されていれば設定は完了です。
※サンプルコードには既に参照設定が追加されているので改めて設定する必要がありません
先にインストールして Live SDK に含まれている Signin Contorlを使用するには、2つのライブラリを参照に追加する必要があります。
ソリューションエクルプローラーの「参照設定」を右クリックし、「参照の追加」を選択してください。
.NET タブに「Microsoft.Live.Controls」と「Microsoft.Live」という2つのコンポーネントがあるので、これらを選択して「OK」をクリックします。
これで、Live SDK を使用することができるようになりました。
次に、Signin Control を使えるようにします。
画面右側にある「ツールボックス」を開き、「全般」を右クリックして「アイテムの選択」をクリックします。
以下のようにツールボックスアイテムの選択画面が開くので、「Windows Phone コンポーネント」タブから、「SigninButton」を選択してください。こいつが、OAuth 2.0 をハンドリングしてくれるコントロールです。使わなきゃ損です。
ソリューションエクスプローラーで、「Mainpage.xaml」をダブルクリックし、デザイン画面を開いてください。この状態で、「ツールボックス」の「全般」に以下のように「SignInButton」が表示されていれば設定は完了です。
5. ソースに Client ID を埋め込む
Client ID や RedirectUri、Scopes 等は、SignInButton のプロパティとして設定します。 ダウンロードしたサンプルソースの Mainpage.xaml をダブルクリックして開いてください。 以下のような画面が表示されるはずです。 ここで、「サインイン」と書かれたボタンがありますが、これが「SignInButton コントロール」です。こいつのプロパティを表示すると以下のように ClientID や Scope が用意されていることがわかります。2. Windows Live 開発者サイトでアプリケーションを登録 で取得した Client ID を ClientID プロパティに転記してください。 サンプルコードでは Scopes に規定値を入れていませんが、実行時に MainPage() の中で埋め込んでいます。 以上で準備は完了です。
Client ID や RedirectUri、Scopes 等は、SignInButton のプロパティとして設定します。
ダウンロードしたサンプルソースの Mainpage.xaml をダブルクリックして開いてください。
以下のような画面が表示されるはずです。
ここで、「サインイン」と書かれたボタンがありますが、これが「SignInButton コントロール」です。こいつのプロパティを表示すると以下のように ClientID や Scope が用意されていることがわかります。2. Windows Live 開発者サイトでアプリケーションを登録 で取得した Client ID を ClientID プロパティに転記してください。
サンプルコードでは Scopes に規定値を入れていませんが、実行時に MainPage() の中で埋め込んでいます。
以上で準備は完了です。
6. 実行
F5 キーを押してサンプルソースを実行しましょう。 はじめに以下の画面が表示されるので、Sign in ボタンをタップしてください。 はじめに、Windows Live のサインイン画面にリダイレクトされます。メールアドレスとパスワードを入力してサインインしてください。 認証が正しく行われると、次に、アプリケーションに対する認可画面が表示されます。よければ「はい」をクリックして、アプリケーションに対して自分自身の情報へのアクセスを許可します。 なお、認可画面に表示されている各種権限は、SingInButton コントロールの Scopes に指定した値に依存しています。今回は、MainPage.xaml.cs ファイルの MainPage() で、以下のように指定しています。Scopes には「wl.skydrive_update」も含まれており、このアプリケーションは SkyDrive へのアクセスも想定していることがわかります(サンプルの中では何もやっていませんが)。 public MainPage() { InitializeComponent(); signInButton1.Scopes = "wl.skydrive_update,wl.signin,wl.basic,wl.emails,wl.contacts_birthday,wl.work_profile"; //,wl.offline_access"; } 認可が行われると、アプリケーションにはアクセストークンが発行され、こいつを使用してユーザーの情報にアクセスすることができます。SignInButton コントロールではこのあたりの処理が自動的に行われるため、非常に楽です。 以下の画面は Windows Live から取得してきたユーザーのプロファイルを表示したところです。 個人的に、このサンプルで一番苦労したのがリストボックスを2列表示にする部分です(お恥ずかしい)。サインインの実装は、SignInButtonコントロールのドラッグ&ドロップだけなので、1秒で完了します。
F5 キーを押してサンプルソースを実行しましょう。
はじめに以下の画面が表示されるので、Sign in ボタンをタップしてください。
はじめに、Windows Live のサインイン画面にリダイレクトされます。メールアドレスとパスワードを入力してサインインしてください。
認証が正しく行われると、次に、アプリケーションに対する認可画面が表示されます。よければ「はい」をクリックして、アプリケーションに対して自分自身の情報へのアクセスを許可します。
なお、認可画面に表示されている各種権限は、SingInButton コントロールの Scopes に指定した値に依存しています。今回は、MainPage.xaml.cs ファイルの MainPage() で、以下のように指定しています。Scopes には「wl.skydrive_update」も含まれており、このアプリケーションは SkyDrive へのアクセスも想定していることがわかります(サンプルの中では何もやっていませんが)。
認可が行われると、アプリケーションにはアクセストークンが発行され、こいつを使用してユーザーの情報にアクセスすることができます。SignInButton コントロールではこのあたりの処理が自動的に行われるため、非常に楽です。
以下の画面は Windows Live から取得してきたユーザーのプロファイルを表示したところです。
個人的に、このサンプルで一番苦労したのがリストボックスを2列表示にする部分です(お恥ずかしい)。サインインの実装は、SignInButtonコントロールのドラッグ&ドロップだけなので、1秒で完了します。
2011/11/9 追記 Live SDK(プレビュー版)を使用すると SignInButton コントロールを使用して、より簡単に実装できます。以下にサンプルを掲載したので、あわせて参照してください。
【WP for ITPro】SignInButton Control を使用して Windows Phone アプリから Windows Live で認証するサンプル
-----------------------------------------------------
この記事は以下の投稿を参考にしています。
Using Windows Live ID in a WP7 App » BuildMobile
最近 Facebook の話ばかりで、ついマイクロソフトが世界に誇る巨大アイデンティティプロバイダー Windows Live の扱いが手薄になっておりました。
Windows Live の認証を受ける代表的な方法として2つ挙げられます。
前者はすっかりおなじみですよね。今回は比較的目新しい?後者(Live Connect)を使用する方法を紹介します。
と言っても、1から説明するのは大変なのでオンラインの記事は無いかなぁと探してみたら...ありました。
Windows Live チームの BLOG です。Live Connect の概要を知るには、まずは以下の記事をご覧ください。
[開発者向け] Windows Live 開発者向けプラットフォームに OAuth 2.0 などを追加 ― 任意のデバイスやアプリケーション、サイトへの接続が引き続き可能 « Windows Live 最新情報ブログ
そして、具体的な実装方法については MVP 松江さんの記事が gihyo.jp に掲載されています。日本語で懇切丁寧に解説してあるのはこの記事しかありませんので必読です。
使ってみよう! Windows Live SDK/API|gihyo.jp … 技術評論社
上記の記事にもある通り、Live Connect では OAuth 2.0(draft 16)が実装されました。ってことは、Facebook のように、ブラウザコントロールを使用してリダイレクトを受け取りつつ、アクセストークンを取得し、それを使ってユーザーの情報にアクセスすることができるわけですね。
で、面倒な話をしても仕方がないので、非常に手抜きのサンプルを作りました。Windows Live で認証を受けて、ユーザーの情報を取得するだけのものです。以下にサンプルプロジェクトを掲載したので、ダウンロードして LiveConAuth.sln を Visual Studio 2010 で開いてみてください。
ソースコードダウンロード
そのまま実行していただければ、以下のようにログオン画面が表示されるので、メールアドレスとパスワードで認証を受けてください。画面の上半分がブラウザコントロールで、下半分にリ���トボックスががあります(見えていませんが)。Windows Live の画面が表示されるまで少し時間がかかるかもしれません。
認証を受けると、Facebook のように、アクセスへの認可を促す画面が表示されます。ここで「Yes」をタップしてください。
認可が成功すれば、以下のように「Access Granted」と表示されますので「OK」をタップしてください。
一息待っていただくと、画面の下にユーザーのプロフィール情報が表示されます。
いやー画面遷移もない手抜きで、ほんとすみませんです。
そのかわり、ソースコードは1ページで収まっているので追いやすいと思います。
ここで、ごくごく簡単にソースコードについて説明しておきます。Mainpage.xaml.cs を見てください。
■Client ID
はじめに、{"client_id", "<ここにClient IDを転記>"} の部分に注目してください。Facebook を使用する場合にも App ID を取得する必要がありますが、Live Connect 出も同様のIDを取得する必要があります。これを Client ID と呼んでいます。
Client ID を取得するには、以下のサイトにアクセスします。
https://manage.dev.live.com/Applications/Index
画面の右側にある「Create Appication」をクリックして、フォームに必要情報を入力すると、以下のように Client ID を取得することができます。
ここで取得した Client ID を、{"client_id", "<ここにClient IDを転記>"} に転記します。
■scope
次に注目していただきたいのは Live Connect のエンドポイントに各種引数を指定して認可を求める部分です。以下の scope 部が Facebook で言うところの Permision です。Live Connect では scope と呼んでいます。ここに、アプリケーションがアクセスしたい情報や操作を指定します。その他の Scope については以下のページがわかりやすいのでご覧ください(英語ですみません。でもわかりやすいです)。
Live Connect REST API
設定した引数は、https://oauth.live.com/authorize?" に付加して、ブラウザコントロールでナビゲートしています。これも Facebook と同じですね。
private void LiveAuthentication() { var uriParams = new Dictionary<string, string>() { {"client_id", "<ここにClient IDを転記>"}, {"response_type", "token"}, {"scope", "wl.signin,wl.basic,wl.offline_access,wl.emails,wl.contacts_birthday,wl.work_profile"}, {"redirect_uri", "https://oauth.live.com/desktop"}, {"display", "touch"} }; StringBuilder urlBuilder = new StringBuilder(); foreach (var current in uriParams) { if (urlBuilder.Length > 0) { urlBuilder.Append("&"); } var encoded = HttpUtility.UrlEncode(current.Value); urlBuilder.AppendFormat("{0}={1}", current.Key, encoded); } var loginUrl = "https://oauth.live.com/authorize?" + urlBuilder.ToString();
AuthenticationBrowser.Navigate(new Uri(loginUrl)); //AuthenticationBrowser.Visibility = Visibility.Visible;
}
もう1点重要なのが、データの受け取り方です。
Live Connect からの情報は JSON 形式で戻されます。例えば、以下のような感じです。
{ "id": "8c8ce076ca27823f", "name": "Roberto Tamburello", "first_name": "Roberto", "last_name": "Tamburello", "link": "http://cid-8c8ce076ca27823f.profile.live.com/", "birth_day": 20, "birth_month": 4, "birth_year": 2010, "gender": "male", "emails": { "preferred": "Roberto.Tamburello@contoso.com", "account": "Roberto.Tamburello@live.com", "personal": "Roberto.Tamburello@contoso.com", "business": "r_tamburello@example.com" }, "locale": "en_US", "updated_time": "2011-04-21T23:55:34+0000" }
ソースコードに書かれた以下の定義は、上記データを受け取るためのものです。見比べていただくと、何を定義しているのかがご理解いただけると思います。
[DataContract] public class employer { [DataMember(Name = "name")] public string name { get; set; } }
[DataContract] public class position { [DataMember(Name = "name")] public string name { get; set; } }
[DataContract] public class work { [DataMember(Name = "employer")] public employer employer { get; set; } [DataMember(Name = "position")] public position position { get; set; } }
[DataContract] public class EMails { [DataMember(Name = "preferred")] public string preferred { get; set; } [DataMember(Name = "account")] public string account { get; set; } [DataMember(Name = "personal")] public string personal { get; set; } [DataMember(Name = "business")] public string business { get; set; } }
[DataContract] public class WindowsLiveProfile { [DataMember(Name = "id")] public string Id { get; set; } [DataMember(Name = "name")] public string Name { get; set; } [DataMember(Name = "gender")] public string gender { get; set; } [DataMember(Name = "updated_time")] public string updated_time { get; set; } [DataMember(Name = "birth_day")] public string birth_day { get; set; } [DataMember(Name = "birth_month")] public string birth_month { get; set; } [DataMember(Name = "birth_year")] public string birth_year { get; set; } [DataMember(Name = "locale")] public string locale { get; set; } [DataMember(Name = "link")] public string link { get; set; } [DataMember(Name = "emails")] public EMails emails { get; set; } [DataMember(Name = "work")] public work[] work { get; set; }
と、ざくっとした説明で恐縮なのですが、動かせば一目瞭然です。
コードに興味のない IT Pro の皆さんには以下の1点だけ把握していただければOKです。
ごく簡単なコードで Live Connect(OAuth 2)を使用した認証の仕組みを実装することができ、これにより Windows Live に登録されているプロフィール情報を取得することができる
Windows Phone を業務端末として採用するにあたり、壁となっているのがアプリケーションの配布の仕組みです。
Windows Phone にアプリケーションをインストールするには、アプリケーションを Windows Phone Marketplace に登録する必要があります。そして、アプリケーションは必ず Windows Phone Marketplace からダウンロードしなければなりません。標準では企業内のアプリケーション配布の仕組み(System Center Configuration Managger など)を流用することができない...というのがシステム管理者にとっての壁となっています。
しかし、こうした難関の解決こそ IT Pro の本領が発揮できる領域です!
Windows Phone Marketplace には「プライベート配布」と呼ばれる機能が提供されています。これは、Marketplace に登録されたアプリケーションを一般に公開せず、アプリケーションの URL を知っているユーザーだけがインストールできる機能です。
この機能を活用したサービスを独自に開発することで、業務アプリケーションの配布システムを構築することができます。
全体の流れを簡単に示したのが以下の図です。
はじめに、業務アプリケーションのカタログサービスにアクセスするための「管理用アプリケーション」を Windows Phone にインストールする必要があります。インストールのための URL はメール等で利用者に通知する必要があります。
通知された URL にアクセスして Windows Phone に管理用アプリケーションをインストールしたら、利用者は管理用アプリケーションを介して、業務アプリケーションの「カタログサービス」にアクセスすることができます。カタログサービスに新しいアプリケーションが登録された場合には、Windows Phone のプッシュ通知機能を使用して、利用者に新たなアプリの存在を通知することができます。
利用者は必要に応じて業務アプリケーションをインストールすることができます。
ここで問題となるのが、管理用アプリケーションの URL が外部に漏れる可能性があるということです。そのため、アプリケーション管理サービス(カタログサービス)には、防御壁として社内の ID で「認証」を行うためのしくみを実装しておかなければなりません。
クラウドのサービスを、どのように社内IDで認証するのか...IT Pro の皆さんならば容易に解決できますよね。そうです。Windows Azure AppFabric ACS と AD FS の連携です。
認証の流れを書くと以下の通りです。
ちょっと面倒に感じますが、たいした話ではありません。ただ、AD FS の概念は確かに難しいので、この部分は気合を入れて勉強しておく必要があります。
で、このあたりの解説を 2011年11月28日 に開催される Tech Fielders セミナーで行います。セミナーでは、Windows Phone への業務アプリケーションの配布を実装するためのアーキテクチャ解説と、具体的に実装方法について解説する予定です。
スピーカーは、わたしと大西です。私のほうでWindows Azure 側の実装および認証の仕組みについて解説し、それを受けて大西がWindows Phone アプリ側および Marketplace の解説を行う予定です。
Events : [Tech Fielders セミナー 東京] <企業利用者のための Windows Phone アプリケーション開発~業務アプリケーションの配信と管理を実装する> [Windows]
IT Pro 要素と Developer 要素が混在し、少々難易度の高いセミナーとなる予定ですが、みなさまのご参加をお待ちしております。