使ってみよう! Windows Live SDK/API

第15回 Windows Live ID委任認証(2/2)

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

承認の更新

承認トークン内に含まれていた委任トークンは,リソースプロバイダと通信する際に必要になります。そのユーザーデータへ実際にアクセスする方法は,次回以降に紹介します。ここでは先に承認を更新する方法を紹介します。

通常は取得した委任トークンをアプリケーションプロバイダが保存しておき,ユーザーデータへアクセスする際に使用しますが,委任トークンには有効期限があります。ユーザーがオファーとアクションに対して承認した有効期限よりも短く,数時間程度が有効期限として設定されているようです。委任トークンは承認トークンに含まれていた更新トークンを使用して新たに有効な委任トークンを取得できます。これを承認の更新と呼び,この更新方法を説明します。

新しい委任トークンを取得するには,次の承認サービスの承認更新用のURL「https://consent.live.com/RefreshToken.aspx」に必要なパラメータを指定してアクセスします。承認要求と似た操作になりますが,大きく次のふたつの点で異なります。

  • ユーザーの操作(承諾など)がない

  • JSON(JavaScript ObjectNotation)形式で情報が返ってくる

承認要求では,ユーザーがアクセス許可を行う承認要求ページに移動しユーザーの操作が必要でしたが,委任トークンの更新ではアプリケーションプロバイダとWindows Live ID承認サービスとの間でのみ完了し,ユーザーの操作は必要ありません。また,承認要求の情報はPOSTデータとして承認サービスより取得していましたが,委任トークンの更新では承認更新用のURLへアクセスし,その応答にJSON形式のデータを受け取ります。

以上のように更新処理はJavaScriptのみを使用したやり取りが可能になり,アプリケーション設計においての利便性が考えられますが,実際にはアプリケーション登録(アプリケーションIDを取得)をしていない場合,更新トークンが取得できなかったり,登録している場合は更新情報の復号化処理が必要であったりとあまり利便性はないように思います。

さて,承認更新用のURLのパラメータには次のものを指定します。前回の記事にて紹介した承認の要求時に使用したパラメータと同じものもあります。併せて確認してください。

ru

更新された委任トークンを受け取るURL指定します。URLは完全修飾のドメイン名(例: www.gihyo.jp)を使用し,クエリ文字列のパラメータが含まれていてはいけません。このパラメータはアプリケーション登録がされている場合,省略できます。

ps

アプリケーションプロバイダが必要とする許可(オファーとアクション)を表す文字列を指定します。

reft

更新トークンを指定します。今回紹介した承認情報の取得にて得られた承認トークンに含まれている更新トークンと呼ばれる文字列を指定します。

app

アプリケーション検証トークンを指定します。これは承認要求のときにも指定したものです。アプリケーションが登録してありアプリケーション検証を必須に設定してある場合にこのパラメータが必要になります。アプリケーション検証トークンの作成方法は前回紹介しています。

承認更新情報の受信

承認の更新時,承認サービスからはJSON形式の値が応答されます。値は次のいずれかが格納されています。

ConsentToken

承認トークンです。構造は先に示したものと同じです。有効な期限付きの委任トークンが含まれています。実際にはJSON形式のため次のような形式の文字列として取得されます。

{"ConsentToken":"eact%3D…"}
error

承認更新時に何らかのエラーが発生した場合は,そのエラー内容を示す番号が返ってきます。例えば次のような文字列です。

{"error":"2000"}

エラー番号の内容は,MSDNライブラリ内のエラーコードを参照してください。

次に承認更新を行うVB.NET(ASP.NET)のコード例を示します。ページ中に承認サービスより返ってきたJSON形式の文字列を表示するだけのコードになります。実際のアプリケーションでは,委任トークンの有効期限が切れていた場合,更新トークンを用いて委任トークンを更新するという処理が必要になります。

' Imports System.Net
Dim ps As String = "SpacesPhotos.ReadWrite,ContactsSync.FullSync,ApplicationStorage.ReadWrite"
Dim reft As String = HttpUtility.UrlDecode("更新トークン")
' GetAppVerifierToken, GetTimestamp メソッドは前回の記事を参照
Dim app As String = GetAppVerifierToken("****Application ID****", "****SecretKey****", GetTimestamp)

Dim path As String = String.Format("https://consent.live.com/RefreshToken.aspx?ps={0}&reft={1}&app={2}", ps, reft, app)
Dim req As HttpWebRequest = DirectCast(WebRequest.Create(path), HttpWebRequest)

Try
    Dim json As String
    Using response As HttpWebResponse = DirectCast(req.GetResponse, HttpWebResponse), _
          stream As New System.IO.StreamReader(response.GetResponseStream)
        json = stream.ReadToEnd
    End Using
    Response.Write(json)

Catch webEx As WebException
    Response.Write(webEx.Message)
Catch ex As Exception
    Response.Write(ex.Message)
End Try

サンプルコード

最後に委任認証のサンプルコードについて紹介しておきます。Windows Live IDDelegated Authentication SDK 1.0という各種言語を使用した委任認証のサンプルコードが提供されており,ダウンロードセンターからダウンロードができます。C#,Java,Perl,PHP,Python,Rubyのコードが用意されています。各サンプルの実行は,MSDNライブラリ内の委任認証のサンプルを参照してください。認証部分はライブラリとして使用できるようにサンプルページと分離されています。また,サンプルは委任認証以外にWeb認証と呼ばれるWindows Liveサービスも使用しています。すこしわかりにくいかもしれませんが,暗号・復号化部分など参考になると思います。


委任認証については今回でおわりです。委任認証の使い方は理解いただけたでしょうか。前回と今回の内容だけではアプリケーションとしてはまだ何もできません。次回から委任認証を利用してWindows Live サービス上のユーザーデータにアクセスしてみたいと思います。

著者プロフィール

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

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

URL:http://katamari.jp

コメント

コメントの記入