• 【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 と組み合わせると利用の幅が広がりますね~。

    <つづく>