使ってみよう! Live Framework

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

Live Framework-enabled Webサイト

前回まではMesh-enabled Webアプリケーションと呼ばれる特別なWebアプリケーションを作成しました。Mesh-enabled Webアプリケーションは、Windows PCなどのクライアント上やWebブラウザを通してLive Desktop上で実行し、Meshサービスのユーザーデータへアクセスしていました。

今回からは2回に渡り、通常のWebアプリケーション(Webサイト)からMeshサービスへのアクセスを紹介します。ある手続きを踏むことでどのサーバー上からでもLive Frameworkにより各種Liveサービスにアクセスすることが可能です。Live Frameworkを利用しLiveサービスへアクセスするWebサイトのことをLive Framework-enabled Web siteと呼んでいますが、この名前はMesh-enabled Webアプリケーションと対比してAzure Services Developer Portalで記載されているものです。これ以外の場所では特に呼び名に関しては記載がなく、特に決まってこう呼ぶものでもないようです。一般的なWebサイトやWebアプリケーションと同じと考えてもらえれば結構です。

今回作成するWebサイトはASP.NETを使用していますが、ASP.NETに依存しているわけではありません。ただし、Webサイトはドメインによるアクセス可能であること(IPアドレスだけでは不可)が必要です。また、LiveサービスからのPOSTデータを受信できることが条件です。

委任認証

WebサイトからMeshサービスへアクセスするために、今回はWindows Live ID Delegated Authentication(委任認証)という仕組みを利用します。MeshサービスへアクセスするにはユーザーのWindows Live IDアカウント情報が必要ですが、今回作成するWebサイトのように第3者のWebサイトへアカウント情報を提供することはできませんよね。このような場合に用意されている認証の仕組みが委任認証です。

委任認証を利用すると、ユーザーはマイクロソフトのサーバー上にあるWindows Live ID承認サービスを利用して、特定のWebサイトに対してユーザーデータのアクセス許可を設定できます。Webサイトはユーザーの許可により承認トークンと呼ばれるアカウント情報とは関連性のない文字列を受け取ることができます。この承認トークンを使用してLiveサービス上のデータアクセスを行います。

Windows Live ID委任認証の内容は、使ってみよう! Windows Live SDK/API第14回15回に紹介しています。扱っているLiveサービスが異なるため若干内容に違いがありますが、今回の内容の理解の助けにはなると思いますので併せて参照してください。

Webサイトの登録

最初にAzure Services Developer PortalでWebサイトの登録(プロジェクトの作成)を行います。第7回でMesh-enabled Webアプリケーションのプロジェクトを作成したときのように、新たにプロジェクトを作成します。その際に、⁠Create Live Framework-enabled Web site」を選択します図1

図1 Live Framework-enabled Web site プロジェクトの作成
図1 Live Framework-enabled Web site プロジェクトの作成

続いて作成したプロジェクトのSummaryページにある「Delegated Authentication」「Edit」リンクをクリックして、委任認証に関する情報を編集します図2⁠。

図2 委任認証情報の編集
図2 委任認証情報の編集

確認および編集できる項目は以下の通りです。

Application ID

Liveサービスへアクセスする際に使用するID。

Domain

Webサイトのドメイン(例: www.gihyo.co.jp⁠⁠。IPアドレスやlocalhostを指定することはできません。また、ドメインを一度設定すると変更はできません。

Return URL

Liveサービスからユーザーデータのアクセス許可に関して結果を受け取るページのアドレスを指定します。

Secret Key

WebサイトとLiveサービス間で共有する、認証時の暗号化のための文字列です。

DomainおよびReturn URLを入力し「Update」ボタンをクリックします。

Webサイトの作成

Visual Studio 2008(または無償のVisual Web Developer 2008 Express Editionを使用してWebサイトプロジェクトを作成します図3⁠。メニューのファイル、新規作成からWebサイトを選択します。今回扱うのはWebアプリケーションプロジェクトではなくWebサイトプロジェクトですので注意してください。

図3 新しいWebサイトの作成
図3 新しいWebサイトの作成

続いて、Live Frameworkの.NET Framework用ライブラリを参照します。ソリューションエクスプローラにあるWebサイトを右クリックして、メニューから参照の追加を選択します。以下のDLLファイルを参照します図4⁠。

  • Microsoft.LiveFX.Client.dll
  • Microsoft.LiveFX.ResourceModel.dll
  • Microsoft.Web.dll
図4 参照の追加
図4 参照の追加

各ファイルはSDKをインストールしている場合、⁠%programfiles%\Microsoft SDKs\Live Framework\v0.91\API Toolkits\.Net Library」にあります。

承認の要求

委任認証において、まずWebサイトが行うことは、ユーザーに対してデータアクセスの許可を承認してもらうため、承認要求ページへのリンクを提示することです。ユーザーは承認要求ページへ移動しWebサイトに対しアクセス許可の設定を行います。Meshサービスの場合、承認要求のURLは「https://developer.mesh-ctp.com/web/apps/appconsent.aspx」「appconsent.aspx?ru=...&ps=...&pl=...&app=...」のようなパラメータを指定したものになります。ユーザーが目にするページは図5のようなページです。

図5 承認要求ページ
図5 承認要求ページ

ページ中の「Allow access」をクリックすると、Webサイト登録時に設定したReturn URLへ戻ります。このとき承認結果がPOSTデータとして渡されます。

承認要求URLのパラメータ

承認要求のURLに指定する代表的なパラメータは、次のものがあります。

ru

承認要求ページからの戻り先URLです。Webサイト登録時に入力したReturn URLと同じ値を指定します。

ps

Webサイトが要求するアクセス許可を表す文字列を指定します。委任認証ではこの許可のことをオファーアクションと呼んでいます。ユーザーデータのカテゴリがオファー、オファーに対しての操作がアクションです。たとえば以下のようなものがあります。

  • Profiles.Read
  • Contacts.Read
  • Contacts.Write
  • News.Read
  • News.Write
  • News.Full
  • LiveMeshFolder.Read
  • LiveMeshFolder.Write
  • LiveMeshFolder.Full

Live Meshフォルダに対して読み取りのみの操作が必要な場合は、⁠LiveMeshFolder.Read」と指定します。この場合は、LiveMeshFolderがオファー、Readがアクションです。複数のオファーとアクションを指定する場合は「,」で区切ります。同一のオファーを複数指定することはできません(⁠⁠LiveMeshFolder.Read,LiveMeshFolder.Write」と指定するのではなく、LiveMeshFolder.Fullを使用する⁠⁠。

pl

WebサイトのプライバシーポリシーのURLを指定します。必ず指定する必要があります。

app

アプリケーション検証トークンと呼ばれる文字列を指定します。Windows Live ID承認サービスがWebサイトを識別するために使用します。トークンの生成には暗号化処理などが必要ですが、今回はWindows Live ID Delegated Authentication SDKにあるライブラリを利用し、その処理内容までは説明しません。詳しい生成方法は、使ってみよう! Windows Live SDK/API第14回を参照してください。

appUrl

Mesh上のWebサイトを表す相対URLです。Azure Services Developer PortalのプロジェクトSummaryのページにある「Application Self Link」「/Mesh/Applications/***」の部分を指定します図6⁠。

図6 Application Self Link
図6 Application Self Link

appUrlは、これまでの委任認証には無かったパラメータです。

Windows Live ID Delegated Authentication SDK

承認要求URLの作成には、Windows Live ID Delegated Authentication SDKを使用します。Download CenterからSDKダウンロードします。SDKは多様なプログラミング言語のものが用意されています。本連載ではVB.NETのものを使用します。Live Framework発表以前からある委任認証のためのライブラリなため、少し変更して使用する必要があります。

SDKに含まれるコードをWebサイトプロジェクトに追加しておきましょう。ソリューションエクスプローラからWebサイトを右クリックし、メニューの「ASP.NETフォルダの追加」から「App_Code」を選択します。作成されたApp_Codeフォルダ内へ、SDKにあるWindowsLiveLogin.vbをコピーします図7⁠。

図7 App_Codeフォルダ
図7 App_Codeフォルダ

SDKのファイルは「%programfiles%\Windows Live ID\ DelAuth-VB」にコピーされています。

承認要求URLの提示

Webページに承認要求ページへのリンクを表示できるようコーディングしてみましょう。

承認要求URLのパラメータ作成に必要な情報をweb.configに記述します。<appSettings />部分を以下のように変更します。これらの値はWindowsLiveLogin.vbに記述されているWindowsLiveLoginクラスから使用します。

<appSettings>
  <add key="wll_appid" value="Application ID/">
  <add key="wll_secret" value="Secret Key"/>
  <add key="wll_securityalgorithm" value="wsignin1.0"/>
  <add key="wll_returnurl"
       value="http://example.jp/WebSite/delauth-handler.aspx"/>
  <add key="wll_policyurl"
       value="http:// example.jp/WebSite/Policy.aspx"/>
  <add key="wll_consenturl"
       value="https://developer.mesh-ctp.com/web/apps/appconsent.aspx"/>
  <add key="wll_appurl" value="Mesh/Applications/(ID)"/>
</appSettings>

設定のkeyとvalueは以下の通りです。Azure Services Developer PortalのプロジェクトSummaryページから必要な部分をコピーします。

Key Value
wll_appid Application ID
wll_secret Secret Key
wll_securityalgorithm セキュリティアルゴリズム。⁠wsignin1.0」を指定します。
wll_returnurl Return URL
wll_policyurl プライバシーポリシーURL
wll_consenturl 承認要求URL
wll_appurl Mesh上のWebサイトを表す相対URL

Default.aspxの<body>内のHTMLを次のように編集します。リンクを表示し、リンク先は_DefultクラスのConsentUrlフィールドの値になるようにしています。

<form id="form1" runat="server">
    <div>
        <span id="linkConsent" runat="server"><a href="<%=ConsentUrl%>">アクセス許可の設定</a></span>
    </div>
</form>

Default.aspx.vbのコード部分は以下のように記述します。

Imports System.Web.Configuration
Imports Microsoft.LiveFX.Client
Imports Microsoft.LiveFX.ResourceModel
Imports WindowsLive

Partial Class _Default
    Inherits System.Web.UI.Page

    ' 承認要求ページのURL
    Public ConsentUrl As String

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' オファーとアクション
        Const offers As String = "LiveMeshFolder.Full,Profiles.Read,Contacts.Write,News.Full"

        ' WindowsLiveLogin インスタンス生成 True 指定で Web.config の値を使用
        Dim login = New WindowsLiveLogin(True)

        ' 承認要求 URL の作成
        Me.ConsentUrl = login.GetConsentUrl(offers).Replace("Delegation.aspx", ) & _
            "&appUrl=" & HttpUtility.UrlEncode(WebConfigurationManager.AppSettings("wll_appurl"))

    End Sub
End Class

Windows Live ID Delegated Authentication SDKにあるWindowsLiveLoginクラスのGetConsentUrlメソッドを使用するとweb.configの設定値から承認要求URLを作成できます。メソッドの引数はオファーとアクションの文字列です。ただし、appUrlパラメータに対応していないなど不都合があるため、メソッドの戻り値を加工しています。承認要求URLのファイル名がDelegation.aspxの固定値になっているため削除し、appUrlパラメータを追加しています。クラスをLive Frameworkに対応させる方がスマートですが、今回はこのようにしています。

ここまで記述したら一度デバッグ実行してみましょう。ページ上のリンク図8をクリックし、図5のような承認要求ページへ移動すれば成功です。まだ戻り先のページの用意や処理を書いていませんので、それ以降は動作しません。

図8 実行画面
図8 実行画面

今回はここまでです。次回、承認情報の受信処理を行い、Live Frameworkを利用してMeshサービスへアクセスします。

おすすめ記事

記事・ニュース一覧