使ってみよう! Live Framework

第11回 Live Framework-enabled Webサイト(2/2)

この記事を読むのに必要な時間:およそ 4.5 分

はじめに

今回は前回に引き続き,通常のWebサイトからLive FrameworkとWindows Live ID Delegated Authentication(委任認証)を利用してMeshサービスへアクセスする方法についてです。Webサイトは,ユーザーにユーザーデータへのアクセス許可を承諾してもらうことで始めてMesh上のデータへアクセスが可能になります。前回は,許可の承諾を行う承認要求ページ図1への遷移まで紹介しました。今回は承認情報を受信し,Meshサービスへアクセスします。

図1 承認要求ページ

図1 承認要求ページ

開発環境

承認情報を受信するにあたり,前回も触れたとおりLiveサービスからWebサイトへアクセスできる必要があります。つまり,Visual Studioで使用するASP.NET開発サーバーではWebサイトのデバッグができません。今回の内容を確認するためには,リモートのWebサーバーへWebサイトを配置したり,IISを開発用PCへインストールし外部からアクセスできるようネットワークの設定をしたりする必要があります。以下に準備すべき開発環境について簡単に説明します。

セキュリティに気を付ける必要がありますが,個人の開発では開発PCをWebサーバーとして公開する方法がPCも1台で済み手軽な方法でしょう。Windows Vistaの場合,コントロールパネル内のプログラムから「Windows機能の有効化と無効化」よりWebサーバー機能を持つIISをインストールできます。

次にWebサイトのドメインについてです。Liveサービスは「gihyo.jp」などのような,ドメインを使用してWebサイトにアクセスするため固定のIPアドレスを所有している必要はありません。ダイナミックDNSサービスなどを利用してアクセスできるようにしましょう。開発PCをWebサーバーとした場合,ドメインを使用して自身のWebサイトにアクセスすることは通常できません。そのため,hostsというシステムファイルを書き換え,自PCから対象ドメインへアクセスした場合はlocalhost(127.0.0.1)にアクセスするよう設定します。hostsファイルは「%SystemRoot%\System32\drivers\etc」にあります。管理者権限でメモ帳などのエディタから開き,以下の行を追加します。ドメインはAzure Services Developer Portalで登録したWebサイトのドメインです。

127.0.0.1    example.jp

これ以外にもルーターの設定などを行い,Liveサービスを含む外部からドメインにより開発PC上のWebサーバーへアクセスできるようにし,開発PC・外部どちらからもドメインによりWebサーバーへアクセスできるようにします。

承認情報の受信

承認要求ページ上でのユーザー操作により,指定したページアドレスにLiveサービスから承認結果がHTTP POSTメソッドを用いて送られてきます。受信するページは,Azure Services Developer PortalでWebサイトを登録したときにReturn URLの値として指定したアドレスです。また,承認要求のURLのruパラメーターの値としても指定していました。

本連載では,「delauth-handler.aspx」という名前のページにしていました。このページをプロジェクトに追加します。プロジェクトに「新しい項目の追加」からWebフォームを選択します図2)。

図2 Webフォームの追加

図2 Webフォームの追加

このページで承認情報を受信し,その内容により適切なページへリダイレクト(今回はDefault.aspxとします)するよう処理します。

承認情報

Windows Live ID委任認証の仕組みとしては,ユーザーがアクセス許可をした場合/キャンセルした場合とも,許可またはキャンセルしたという結果がLiveサービスより送られてきますが,Live Framework CTPではユーザーがキャンセルした場合,情報は何も送信されないようです。ユーザーがアクセス許可を承諾した場合にLiveサービスから送信されるPOSTデータのパラメータは次の4個です。

ResponseCode

ユーザーが,アクセス許可の承諾またはキャンセルを示す値です。承諾したときの値は「RequestApproved」です。

ConsentToken

承認トークンと呼ばれる文字列です。このトークン内は,さらに複数のパラメータに分割でき,ユーザーデータのアクセスに必要な情報が含まれています。

action

ユーザーが行った操作を示す値です。承認要求の完了を示す「delauth」という値になります。

appctx

Webサイトが必要に応じて利用するための値です。承認要求時のURLに「appctx=…」というようにパラメータを指定しておくと,その値が返ってきます。本連載では使用していません。

承認トークン

承認トークンは暗号化されています。復号化すると,次の値が含まれています。

  • 委任トークン
  • 更新トークン
  • セッションキー
  • オファーとアクション
  • 委任トークンの有効期限
  • Location ID

それぞれの内容はわからないと思いますが,どれも委任認証に出てくる単語ですので当然です。ただし,オファーとアクションは前回出てきましたね。この中で最低限必要なものは委任トークンと呼ばれる文字列です。

委任トークンは,Meshサービスへ接続する際に認証に使用します。本連載ではこれまでにMeshサービスへ接続する(Live Operating Environmentへ接続する)際にWindows Live IDアカウント情報を使用していましたが,委任トークンを使用した接続も可能です。

本記事では,承認トークンの復号化と各パラメータの取得はWindows Live ID Delegated Authentication SDKに含まれるクラスライブラリに任せます。承認トークンの復号化や各パラメータの詳しい内容を知りたい方は使ってみよう! Windows Live SDK/API第15回にて扱っていますので,そちらを参照してください。

委任トークンの取得

それでは,Liveサービスから送信された情報から,委任トークンを取得するコードを書いていきましょう。委任トークンを取得後は,Cookieに格納しDefault.aspxへリダイレクトします。Default.aspxではCookie情報を確認し,委任トークンがある場合はMeshサービスへのアクセス処理へ,ない場合は前回の内容の承認要求ページへのリンクを表示するようにします。

delauth-handler.aspx.vbに以下のように処理を記述します。

Imports WindowsLive
Partial Class delauth_handler
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Request("action") = "delauth" Then
            ' アクセス許可の承諾処理が完了している場合

            ' 承認トークンの取得
            Dim login = New WindowsLiveLogin(True)
            Dim consentToken = login.ProcessConsent(Request.Form)

            ' 委任トークンを Cookie へ格納
            Dim cookie = New HttpCookie("consentToken")
            cookie("delToken") = consentToken.DelegationToken
            cookie.Expires = consentToken.Expiry.ToLocalTime
        End If

        ' Default.aspx へリダイレクト
        Response.Redirect("Default.aspx")
    End Sub
End Class

ページが読み込まれた時,POSTデータのactionパラメータの値がdelauthのとき承認要求ページから遷移し,アクセス許可が承諾されたと判断しています。委任トークンは前述の通りLive ID Delegated Authentication SDKのクラスを利用して取得しています。委任トークンには有効期限があります。コードではこれを利用してCookieの有効期限の設定も行っています。

著者プロフィール

松江祐輔(まつえゆうすけ)

日本システムウエア株式会社 勤務。現在,ハードウェア設計・検証業務を担当。大学生・大学院生時代はベンチャー企業 有限会社ミレニアムシステムズにプログラマーとして従事。趣味はプログラミング。好きな言語はVisual Basic。Microsoft MVP for Windows Live Platform(Jul 2010 - Jun 2011),Windows Live(Jul 2011 - Jun 2013)。

URL:http://katamari.jp

コメント

コメントの記入