November, 2011 - フィールドSEあがりの安納です - Site Home - TechNet Blogs

フィールドSEあがりの安納です

Microsoft Evangelist -- Junichi Anno

November, 2011

  • 【WP for ITPro】Windows Phone から直接 Active Directory 認証を行うには ~その2

    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. 必要な環境について

    これから紹介する仕組みを実装するには、少なくとも以下の環境が必要です。ちょっと面倒ですが頑張ってください。

    • Widnows Server 2008 R2 または 2008
      - Active Directory Domain Service
      - Active Directory Federation Service
    • Windows 7(仮想環境はダメ!
      - Windows Phone SDK(2008/2008 r2 にはインストールできません)
      ※ Visual Studio 2010 Express for Windows Phone も含まれています
      ※ 仮想環境だと Windows Phone Emulator が動きません!かならず物理環境を用意してください。
      - Identity Developer Training Kit 2010 April

    2.Windows Server の準備

    必要な環境を構築しましょう。いちから作るのは大変ですが、それもまた楽し!
    今回は、ドメインコントローラーと同じサーバーに AD FS をインストールするものとします。

    • Windows Server 2008 または 2008 R2 をインストールする
      Windows Server 2008 R2 SP1 評価版 のダウンロード
    • Active Directory をインストールする
      「ファイル名を指定して実行」から「dcpromo」と入力して実行するとウィザードが起動します。インストール方法がよく分からない方は WebCast : Active Directory 入門編 を参照してください。2008年に収録したビデオですが、問題ありません。
    • Active Directory Federation Service(AD FS)をセットアップする
      AD FS は、こちらからダウンロードしてください。
      いろいろ考慮しだすと先に進まないと思うので、ひとまずサクッとインストールして最小限の構成をするための手順書を作りました。
      【IDM】Windows Phone アプリ開発者のための AD FS 2.0 セットアップ手順書
    • サーバー証明書を p7b 形式で保存しておく
      AD FS のエンドポイント(認証を要求するURL)は SOAP で実装されており、かつ SSL が要求されます。Windows Phone の場合、サーバー証明書は自動的にインストールされないため、Windows Phone からSOAPにアクセスすると「エンドポイントがリスンしてない!」というエラーが返されてしまいます。
      この現象を回避するには、事前に Windows Phone 側にサーバー証明書をインストールしておく必要があるため、それに先立ってWindows Phone からネットワーク的に見える場所に証明書を準備しておく必要があります。
      証明書の準備とインストール方法については以下の記事をご覧ください。
      【WP for ITPro】Windows Phone とルート証明書の関係、自己署名証明書のインストール方法

    3. Windows 7(開発環境)の準備

    Windows 7 は開発環境であり、Windows Phone Emulator の動作検証端末でもあります。既に書いた通り、仮想環境上では Windows Phone エミュレーターが正常に動作しませんので、かならず物理環境にインストールしてください。

    • Active Directory ドメインに参加
      参加しなくても大丈夫なような気がするのですが....私の環境では参加しているので念のために記しておきます。
    • Windows Phone SDK 7.1 
      何は無くとも、Windows Phone アプリの開発を行うための SDK をインストールします。SDK には Visual Studio 2010 Express for Windows Phone も含まれているので、別途ダウントードする必要はありません。SDK は以下からダウンロードしてインストールしてください。
      ダウンロード詳細 Windows Phone SDK 7.1
    • Windows Identity Developer Training Kit 2010 April
      Windows Phone には AD FS にアクセスするためのライブラリが用意されていません。自分で作ることもできなくはないでしょうが、面倒なので既存のライブラリを流用したいでしょう。そこで使えるのが、デスクトップ Silverlight 用に用意されている SL.IdentityModel というライブラリです。
      このライブラリは、Windows Identity Developer Training Kit 2010 April という非常にマニアックな(笑)トレーニングキットに含まれています。結構でかいファイルですが、これもダウンロードしてインストールしておきましょう。残念ながら英語版しかありません。でもライブラリなので、そんなの関係ねぇです(← あ、いいこと思いついた!これにちょっとした振りとか付ければギャグにできるかも!)。
      Download: Identity Developer Training Kit - Microsoft Download Center - Download Details

    4.サンプルプロジェクトを用意する

    以上が全てインストールされたら準備完了です。

    Visual Studio が起動出来たら、以下のサンプルプロジェクトを読み込んで実行してみてください。もちろん、サーバー名とかユーザーIDは変えてください。詳しくは次回の投稿で解説します。

    Windows Phone から AD FS にアクセスするためのサンプルプロジェクト

    つづき(その3)へ

  • 【WP for ITPro】Windows Phone とルート証明書の関係、自己署名証明書のインストール方法

    ちょっと面倒な証明書のお話し。

    ■標準で実装されているルート証明書

    Windows Phone に標準で実装されているルート証明書は以下の通りです。

    ※詳細は SSL Root Certificates for Windows Phone

    • AOL (United States)
    • RSA Security (United States)
    • Comodo (United States)
    • SECOM Trust Systems Co. Ltd (Japan)
    • DigiCert (United States)
    • Taiwan-CA Inc. (Taiwan)
    • Entrust (Canada)
    • TrustCenter (Germany)
    • GlobalSign (United Kingdom)
    • Trustwave (United States)
    • GoDaddy (United States)
    • VeriSign (United States)
    • Keynectis (France)
    • VeriSign Business (United States)
    • QuoVadis (Bermuda)

    これ以外の発行者による証明書は、自分自身で Windows Phone デバイスや Windows Phone エミュレーターにインストールする必要があります。自己証明証明書の場合も同様です。

    なお、PC の場合には、SSLサイトにアクセス後、ブラウザ等から直接証明書をインストールすることができます。しかし、Windows Phone の場合にはそれができません。もちろん、Active Directory で配布...なんてこともできません。つまり、何らかの配布方法を考慮する必要があります。

    ルート証明書を自分自身で Windows Phone にインストールするには、以下の2通りの方法が考えられます。

    • WEBサイトに掲載してブラウザやアプリケーションからダウンロードする
    • 電子メールに添付して電子メールクライアントからダウンロードする

    いずれの方法を使用してもよいのですが、特定のアプリケーションが使用する場合には、アプリケーションの中でインストールできるようにしておいたほうが、利用者にとって分かりやすいと思います。インストール忘れによるトラブルも減るでしょう。

    ■簡単な自己署名証明書の作成方法

    ※クラウド上のインスタンスなど、任意の主体名を持った自己署名証明書を作成する方法は以下にまとめてあります
    【Azure for ITPRO】自己署名証明書を作成する

    ちなみに、IIS がインストールされている環境で、自分自身の自己署名証明書を作成するには、IIS の管理コンソールでサーバーを選択し、「サーバー証明書」を開きます。

    image

    次に、右側のアクションペインから「自己署名入りの証明書の作成」をクリックします。

    image

    証明書のフレンドリ名を聞かれるので、識別しやすい名前を入力すれば完了です。

    image

    作成された自己署名証明書は、自動的にサーバーにインストールされます。

    ■作成した自己署名証明書をエクスポートする

    Windows Phone に自己署名証明書をインストールするには、サーバーにインストールされた自己署名証明書をファイルに保存する必要があります。もちろん、WEBに掲載したり、メールに添付するためです。

    証明書は以下のいずれかの形式でエクスポートすることができます。

      • .pfx:個人情報交換 (PKCS #12)
      • .p7b:暗号化メッセージ構文標準 (PKCS #7)
      • .cer:DER Encoded Binary X.509
      • .cer:Base64 Encoded X.509

    証明書をエクスポートするには、証明書エクスポートウィザード を使用します。

    まずは、IIS の管理コンソールの「サーバー証明書」で、エクスポートしたい証明書をダブルクリックして開きます。

    image

    以下のように証明書が開くので、真ん中の「詳細」タブを開き、「ファイルにコピー」をクリックしてください。

    image image

    ここで、「秘密キーをエクスポートしない」を選択すると、以下の通り「.p7b」「.cer(DER Encoded Binary X.509)「.cer(Base64 Encoded X.509)」の3種類から選択することができます。

    image

    一方、「秘密キーをエクスポートする」を選択した場合、以下のように pfx 形式しか選択することができません。

    image

    いずれの形式でエクスポートするかは用途によって異なりますが、WEBサービスのサーバー証明書として Windows Phone にインストールする場合には .cer または .p7b 形式を選択してください。

    ■留意点

    Windows Phone に自己署名証明書をインストールしようとした場合、電子メール添付とWEBサイトとで、インストールできる証明書の種類が異なります。これが意図的なものであるのかどうかについては現在調査中ですが、とりいそぎ、以下の通りまとめておきます。ご注意ください。

      電子メールに添付 WEBサイトに掲載
    個人情報交換 (PKCS #12)
    .pfx
    OK
    image
    OK
    image
    DER Encoded Binary X.509
    .cer
    OK
    image
    NG
    image
    Base64 Encoded X.509
    .cer
    OK
    image
    NG
    image
    暗号化メッセージ構文標準 (PKCS #7)
    .p7b
    OK
    image
    OK
    image
  • 【IDM】Windows Phone アプリ開発者のための AD FS 2.0 セットアップ手順書

    開発者にとって何が面倒って、開発環境を準備することほど面倒なことはありません(なんてことは言っちゃいられないのでしょうけど)。特に、インフラ系の知識を多分に要求されるようなものは面倒です。

    現在、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 セットアップ手順
    image

    AD FS や AppFabric ACS をじっくり勉強したい、そしてクラウドアプリとの連携についてテストしてみたい!という方は以下を参照してください。300ページあります。

    image

  • 【WP for ITPro】Windows Phone から直接 Active Directory 認証を行うには ~その1

    2011年11月28日 Tech Fielders セミナー 「Windows Phone に認証機能を実装する」で使用した資料、ソースコードは以下からどうぞ。当日の収録動画もあります。

    2011/11/28 セミナー資料 Windows Phone アプリケーションに認証機能を実装する

    Windows Phone に業務アプリケーションをインストールして使用する場合、業務アプリケーショにはなんらかの「認証」の仕組みが実装されている必要があります。もちろん、社内にはきちんと管理された認証基盤が設置されているという前提です。例えば Active Directory ですね。

    ここで業務サービスの構成について簡単にまとめておきます。考慮しなければならないのは大きく分けて以下の2点です。

    • 業務サービスの場所
      • オンプレミス
      • クラウド
    • 業務サービスにアクセスする Windows Phone アプリケーションが何か?
      • Internet Explorer Mobile 9
      • Silverlight アプリケーション

    業務サービスの場所については言わずもがなですね。社内認証基盤との通信経路が確保されているかどうかが重要な課題になります。オンプレミスの業務サービスであれば通信経路の心配は必要ありませんが、クラウドに存在する場合には何らかの方策を検討する必要があります。

    そこで使えるのが、IT Pro の皆さんにはおなじみ「Windows Azure Connect」です。Windows Azure Connect を使用することで、Windows Azure 上のインスタンスは社内 Active Directory ドメインと通信することができるようになります。必要であれば、AD ドメインに参加することだって可能です。

    image
    ※ Windows Azure Connect の使い方は IT Pro (IT 担当者) のための Windows Azure Platform 運用管理ガイド 1.0 へ!

    業務サービス側が社内 AD での認証を行ってくれれば、Windows Phone アプリケーション側には認証に関するロジックを実装する必要はありません。せいぜい、ユーザーIDとパスワードを入力するためのダイアログボックス程度です。Windows Phone 側のアプリケーションが IE9 であれば、それさえも必要なく、認証が必要になると以下のようなポップアップが表示されます。

    image

    では、Windows Phone から直接 Active Directory で認証したい場合はどうしましょう?

    image

    あまり大きな声では言えませんが、現時点で Windows Phone は System.DirectoryServce をサポートしておらず、Active Directory ドメインに参加したり、Active Directory ドメインに直接認証を依頼することが事実上困難な状況です。

    では、全く道が無いかといえばそうでもなく、Windows Phone アプリケーションと Active Directory の間に「認証代行サービス」的な仲介役を設置すれば何とかなります。つまり、認証代行サービスがユーザーIDとパスワードを受け取り、裏で AD認証を行い、結果を Windows Phone アプリに返してくれる...といったものです。

    image

    いま「えぇ、作るのぉ~」とげんなりした方、安心してください。Active Directory Federation Service という強い味方がいるじゃないですか!すなわち、以下のようなイメージです。

    image

    AD FS は、何もパッシブな WEB SSO だけで使用するものではありません。WS-Trust というプロトコルを使用して、アクティブな認証をすることだってできるのです。

    次回は Windows Phone アプリから AD FS にアクセスするための環境構築について解説します。

    つづき 【WP for ITPro】Windows Phone から直接 Active Directory 認証を行うには ~その2

  • 【WP for ITPro】Windows Phone から社内のファイルサーバーにアクセスしたい~その1

    Windows Phone には Office Hub というソフトウェアが実装されており、SharePoint(オンプレミスおよび Office 365)と SkyDrive に接続してデータを取りだしたり保存することができます。以下の図は Office Hub と周辺サービスとのデータ交換の様子を図にしたものです。

    image

    Windows Phone が社外ネットワーク上にある場合には、Forefront Unified Access Gateway を使用して社内の SharePoint Server にアクセスすることができます。残念ながら、現時点では UAG 以外のゲートウェイがサポートされていません。

    image

    ひとまず、標準では上記以外のデータストアにアクセスすることができません。

    でも、「ファイルサーバーにアクセスしたいのよっ!」と考えるのが人情ってものです。

    Windows Phone から Windows のファイルサーバーに接続するためのパスは、以下の通りいくつか考えらえます。

    image

    いずれにしても、それぞれのプロトコルにアクセスするためのアプリケーションを開発しなければなりません。開発を避けるには Marketplace からアプリケーションを購入する必要があるわけですが、Windows Phone の日本語版マーケットプレースを見てみると、FTPクライアントは見当たりますが、smb に直接アクセスしたり、WebDavにアクセスするためのアプリケーションは見当たりません。

    アプリケーションを購入するにせよ、自作するにせよ、スマートフォンの利用シーンは社外であることが多いはずですから、インターネットから接続できるパスを用意する必要があります。

    そこで、例として以下のような仕組みを考えてみましょう。

    image

    環境を簡単に解説すると以下の通りです。

    ■ オンプレミス

    • WEBDAV で公開されたファイルサーバー + Active Directory
    • Windows Azure とは Azure Connect(プレビュー版)で VPN 接続されています。

    ■クラウド(Windows Azure)

    • Windows Azure Connet で接続されたインスタンス上に、WebDavにアクセスするための WCFサービスがホストされている
    • インスタンスは Active Directory ドメインに参加している

    ■ Windows Phone

    • Windows Azure 上のWCF サービスにアクセスするためのアプリケーション

    開発したのはサンプルは、Azure 上にホストする WCF サービスと、Windows Phone 用のブラウジングアプリです。

    どうです?なんとなくつながる気がしませんか?MVP の normalian 氏からは、「海外のデータセンター経由かぁ」と難色を示されてしまいましたが...。エヘヘ。

    実際に上記の図を実装したアプリケーションを作ってみました。

    以下の画面に表示されているのは WCFサービスに渡すためのパラメタです。WEBDAVサーバーという設定値がありますが、このサーバーに直接接続するわけではなく、この値をユーザーIDとパスワードとともに、Azure 上にホストした WCF サービスに渡します。ユーザー ID とパスワードはオンプレミスにある Active Directory に登録されているものです。

    image

    上記の値を受け取った WCF サービスは、Windows Azure Connect で接続されたオンプレミスの WebDav サーバーに接続し、フォルダ一覧を取得してきます。まだアクセス権等の実装を何もしていないので、以下の画面では全フォルダを持ってきています。

    image

    いちおう、ファイルとフォルダは別々のアイコンで表示できるようにしてみました。

    image

    ファイルを選択してダウンロードボタンをタップすると、ファイルをダウンロードすることができます。

    image

    以下は、PPT をダウンロードして開いたところです。

    image

    ファイルのアップロード等は実装していませんが、そこそこ便利に使えるかなと思います。

    ソースを整理次第、ここでご紹介します。

    Windows Phone 単体では限界もありますが、Azure と組み合わせると利用の幅が広がりますね~。

    <つづく>

  • 【WP for ITPro】SignInButton Control を使用して Windows Phone アプリから Windows Live で認証するサンプル

    image

    この投稿は以下の記事を参考にしています。

    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 が含まれているので、こいつをインストールします。

    2. Windows Live 開発者サイトでアプリケーションを登録

    以下のサイトに移動してアプリケーション登録を行い、Client ID を取得します。

    https://manage.dev.live.com/Applications/Index?wa=wsignin1.0

    登録の手順を簡単に書いておきます。

    My Apps サイトで画面の右側にある「Create Application」をクリックしてください。

    image

    アプリケーション名を「適当に」入力し、言語として「Japanese」を選択します。ここで入力したアプリケーション名は、ユーザーにアクセス認可を受ける際に表示されるので注意してください。入力したら「I accept」をクリックします。

    image

    登録が完了すると、以下のように Client ID が表示されます。これは、あとでアプリケーションに埋め込む必要があるので控えておいてください。Client ID を控えたら、「Appication Setting Page」をクリックます。

    image

    Settings ページが表示されるので、「API Settings」タブをクリックし、「Mobile client app」を 「yes」 に設定してください。必ず「Save」をクリックして保存しましょう。

    image

    以上で設定は完了です。

    3.サンプルコードのダウンロード

    コーディングは非常にシンプルなのですが、サンプルを用意しました。いかからダウンロードしてください。

    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」をクリックします。

    image

    これで、Live SDK を使用することができるようになりました。

    次に、Signin Control を使えるようにします。

    画面右側にある「ツールボックス」を開き、「全般」を右クリックして「アイテムの選択」をクリックします。

    image

    以下のようにツールボックスアイテムの選択画面が開くので、「Windows Phone コンポーネント」タブから、「SigninButton」を選択してください。こいつが、OAuth 2.0 をハンドリングしてくれるコントロールです。使わなきゃ損です。

    image

    ソリューションエクスプローラーで、「Mainpage.xaml」をダブルクリックし、デザイン画面を開いてください。この状態で、「ツールボックス」の「全般」に以下のように「SignInButton」が表示されていれば設定は完了です。

    image

    5. ソースに Client ID を埋め込む

    Client ID や RedirectUri、Scopes 等は、SignInButton のプロパティとして設定します。

    ダウンロードしたサンプルソースの Mainpage.xaml をダブルクリックして開いてください。

    以下のような画面が表示されるはずです。

    image

    ここで、「サインイン」と書かれたボタンがありますが、これが「SignInButton コントロール」です。こいつのプロパティを表示すると以下のように ClientID や Scope が用意されていることがわかります。2. Windows Live 開発者サイトでアプリケーションを登録 で取得した Client ID を ClientID プロパティに転記してください。

    image

    サンプルコードでは Scopes に規定値を入れていませんが、実行時に MainPage() の中で埋め込んでいます。

    以上で準備は完了です。

    6. 実行

    F5 キーを押してサンプルソースを実行しましょう。

    はじめに以下の画面が表示されるので、Sign in ボタンをタップしてください。

    image

    はじめに、Windows Live のサインイン画面にリダイレクトされます。メールアドレスとパスワードを入力してサインインしてください。

    image

    認証が正しく行われると、次に、アプリケーションに対する認可画面が表示されます。よければ「はい」をクリックして、アプリケーションに対して自分自身の情報へのアクセスを許可します。

    image

    なお、認可画面に表示されている各種権限は、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 から取得してきたユーザーのプロファイルを表示したところです。

    image

    個人的に、このサンプルで一番苦労したのがリストボックスを2列表示にする部分です(お恥ずかしい)。サインインの実装は、SignInButtonコントロールのドラッグ&ドロップだけなので、1秒で完了します。

  • 【WP for ITPro】Windows Phone アプリから Windows Live で認証するサンプル

    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つ挙げられます。

    • Windows Azure AppFabric ACS を使用する
    • Live Connect(旧称 Windows Live Messenger Connect)を使用する

    前者はすっかりおなじみですよね。今回は比較的目新しい?後者(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 の画面が表示されるまで少し時間がかかるかもしれません。

    image

    認証を受けると、Facebook のように、アクセスへの認可を促す画面が表示されます。ここで「Yes」をタップしてください。

    image

    認可が成功すれば、以下のように「Access Granted」と表示されますので「OK」をタップしてください。

    image

    一息待っていただくと、画面の下にユーザーのプロフィール情報が表示されます。

    image

    いやー画面遷移もない手抜きで、ほんとすみませんです。

    そのかわり、ソースコードは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

    image

    画面の右側にある「Create Appication」をクリックして、フォームに必要情報を入力すると、以下のように Client ID を取得することができます。

    image

    ここで取得した 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 に登録されているプロフィール情報を取得することができる

  • 【WP for ITPro】Windows Phone に業務アプリケーションを配布するには

    Windows Phone を業務端末として採用するにあたり、壁となっているのがアプリケーションの配布の仕組みです。

    Windows Phone にアプリケーションをインストールするには、アプリケーションを Windows Phone Marketplace に登録する必要があります。そして、アプリケーションは必ず Windows Phone Marketplace からダウンロードしなければなりません。標準では企業内のアプリケーション配布の仕組み(System Center Configuration Managger など)を流用することができない...というのがシステム管理者にとっての壁となっています。

    image

    しかし、こうした難関の解決こそ  IT Pro の本領が発揮できる領域です!

    Windows Phone Marketplace には「プライベート配布」と呼ばれる機能が提供されています。これは、Marketplace に登録されたアプリケーションを一般に公開せず、アプリケーションの URL を知っているユーザーだけがインストールできる機能です。

    この機能を活用したサービスを独自に開発することで、業務アプリケーションの配布システムを構築することができます。

    全体の流れを簡単に示したのが以下の図です。

    image

    はじめに、業務アプリケーションのカタログサービスにアクセスするための「管理用アプリケーション」を Windows Phone にインストールする必要があります。インストールのための URL はメール等で利用者に通知する必要があります。

    通知された URL にアクセスして Windows Phone に管理用アプリケーションをインストールしたら、利用者は管理用アプリケーションを介して、業務アプリケーションの「カタログサービス」にアクセスすることができます。カタログサービスに新しいアプリケーションが登録された場合には、Windows Phone のプッシュ通知機能を使用して、利用者に新たなアプリの存在を通知することができます。

    利用者は必要に応じて業務アプリケーションをインストールすることができます。

    ここで問題となるのが、管理用アプリケーションの URL が外部に漏れる可能性があるということです。そのため、アプリケーション管理サービス(カタログサービス)には、防御壁として社内の ID で「認証」を行うためのしくみを実装しておかなければなりません。

    クラウドのサービスを、どのように社内IDで認証するのか...IT Pro の皆さんならば容易に解決できますよね。そうです。Windows Azure AppFabric ACS と AD FS の連携です。

    認証の流れを書くと以下の通りです。

    image

    ちょっと面倒に感じますが、たいした話ではありません。ただ、AD FS の概念は確かに難しいので、この部分は気合を入れて勉強しておく必要があります。

    で、このあたりの解説を 2011年11月28日 に開催される Tech Fielders セミナーで行います。セミナーでは、Windows Phone への業務アプリケーションの配布を実装するためのアーキテクチャ解説と、具体的に実装方法について解説する予定です。

    スピーカーは、わたしと大西です。私のほうでWindows Azure 側の実装および認証の仕組みについて解説し、それを受けて大西がWindows Phone アプリ側および Marketplace の解説を行う予定です。

    Events : [Tech Fielders セミナー 東京] <企業利用者のための Windows Phone アプリケーション開発~業務アプリケーションの配信と管理を実装する> [Windows]

    IT Pro 要素と Developer 要素が混在し、少々難易度の高いセミナーとなる予定ですが、みなさまのご参加をお待ちしております。