使ってみよう! Live Framework

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

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

Meshサービスへの接続

前回作成したDefault.aspxを編集し,delauth-handler.aspxからDefault.aspxへリダイレクトされたときの処理を追加します。Cookieに委任トークン情報が格納されている場合は,Live Operating Environmentへ委任トークンを使用して接続します。今回はWebサイトからMeshサービスに接続することが目的ですので,処理内容は単純にユーザー名の表示とアクセス許可のあるMesh Object名を列挙することにします。

まずWebページのデザイン部分を変更します。承認要求ページのリンク部分に加え,Mesh情報を表示する領域を追加します。

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

続いてページが読み込まれた時の処理も変更します。ページのLoadイベント時の処理は次のようになります。

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"))

    ' 前回のコードから追記部分↓

    If Request.Cookies("consentToken") Is Nothing Then
        ' 承認トークンの Cookie がない場合、承認要求リンク表示
        linkConsent.Visible = True
        mesh.Visible = False
    Else
        linkConsent.Visible = False
        mesh.Visible = True

        ' Live Operating Environment
        ConnectToLoe(Request.Cookies("consentToken")("delToken"))
    End If
End Sub

Cookieの内容により処理を分岐しています。Cookieから委任トークンを取得し,ConnectToLoeメソッドの引数として渡しています。このメソッドでMeshサービスへアクセスし,情報をページに表示します。

ConnectToLoeメソッドは以下のように記述します。

Protected Sub ConnectToLoe(ByVal token As String)
    ' LOE へ接続
    Dim loe = New LiveOperatingEnvironment()
    loe.Connect(token, _
                AuthenticationTokenType.DelegatedAuthToken, _
                New Uri("https://user-ctp.windows.net/V0.1"), _
                New LiveItemAccessOptions(True))

    ' Mesh 情報の表示
    Dim userName = loe.Mesh.ProvisionedUser.Name ' ユーザー名
    Dim objects = From mo In loe.Mesh.MeshObjects.Entries Select mo.Resource.Title ' Mesh Object
    Dim mos = String.Join(", ", objects.ToArray)
    mesh.InnerText = String.Format("ユーザー名: {0}, アクセス可能な Mesh Object: {1}", userName, mos)
End Sub

LiveOperatingEnvironmentクラスのConnectメソッドの第1引数に委任トークン文字列を渡し,第2引数で委任認証を利用した接続であることを指定しています。

Live Operating Environmentへ接続すると後はこれまでの本連載で扱った内容と同様にMeshサービスへのアクセスが可能です。上記のコードでは,データ所有者のユーザー情報とMesh Objectの一覧を取得しています。

ここまでを実行してみましょう。Default.aspxを開くと承認要求ページへのリンクが表示されます図3⁠。

図3 承認要求ページへのリンク

図3 承認要求ページへのリンク

リンクをクリックして承認要求ページへ移動します。規定ではどのMesh ObjectにもWebサイトからアクセスできないようになっているので,⁠Change」リンクをクリックしアクセス許可を与えるMesh Object(Live Meshフォルダ)を選択します図4

図4 アクセス許可を与えるMesh Objectの選択

図4 アクセス許可を与えるMesh Objectの選択

そして,⁠Allow access」ボタンをクリックします。すると正しく動作していれば,delauth-handler.aspxがロードされDefault.aspxへリダイレクトされるはずです。ページにはユーザーデータの情報が表示されたでしょうか図5⁠。

図5 ユーザーデータ情報の表示

図5 ユーザーデータ情報の表示

もし正しく表示されていない場合は,Visual Studioを使用してブレークポイントを設定するなどしてdelauth-handler.aspxが正しく読み込まれているか,処理分岐が正しく行われているかなどを確認してみましょう。

承認情報の管理

今回作成したWebサイトでは委任トークンをCookieに保存しているだけですので,通常はユーザーデータの所有者しかWebサイトを通じてデータにアクセスできません。しかし,このトークンをWebサーバー上に保存しておくことで第3者にもユーザーデータの提供が可能です。これについては,このような仕組みのための認証ですので問題ありませんが,ユーザーデータの所有者が承諾を取り消したい場合はどうすればいいのでしょうか。

委任認証では,ユーザーはいつでもWebサイトに対してデータの公開範囲やアクセス許可の変更が可能なページが用意されています。https://consent.live.com/ManageConsent.aspxへアクセスすることで各Webサイトへのアクセス許可の一元管理が可能になっています。ただし,Live Framework CTPの内容について正しく動作しているところは確認できていません。このような仕組みがあることだけ現時点では気に留めておくとよいかと思います。

Live Framework CTPでは指定はできませんが,ユーザーデータのアクセスは期限付きで許可することが委任認証の仕組みでは可能です。ユーザーデータのアクセス期限のほか,委任トークン自身にも有効期限があり,これを過ぎてしまったトークンは使用することができません。通常,ユーザーデータの期限よりも短く設定されています。

期限切れになった場合,再びユーザーの許可の承諾によりアクセスが可能になります。ただし,期限切れがトークンだけの場合,ユーザーの手を介さずに有効期限を更新することが可能です。それには承認トークンに含まれている更新トークンというものを使います。Webサイトは,Liveサービスとやりとりすることで新たな委任トークンが取得できます。Live Framework CTPでは仕組みは用意されているものの動作は確認できませんでした。この仕組みも委任認証によるもので詳しくは使ってみよう! Windows Live SDK/API第15回にて扱っています。


Live Framework-enabled Webサイトについては今回で以上です。いかがでしたでしょうか。Live Framework SDKには.NET Framework用のライブラリがあるためASP.NETを使用すると簡単にMeshサービスへアクセスすることができますが,Live Operating Environmentとの対話をHTTPとXMLを用い自力でコーディングしさえすれば,PHPやRubyといった言語でもアクセスが可能です。情報は少なく英語でしかありませんが,興味のある方はぜひトライしてみてください。

著者プロフィール

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

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

URL:http://katamari.jp