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

第45回 OAuth 2.0でLiveへコネクト!

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

サーバーサイドの処理

それでは,実際にWebサーバー上で動作するアプリのコードを書いてみましょう。認可コードによる方法を用います。今回は言語にPHPを使います。

前提条件として,アプリケーション設定サイトでアプリの登録を済ませている必要があります。アプリの登録は,第42回で説明しています。

認可コードの取得

認可コードを得るため,次のエンドポイントへアプリ利用者を誘導します。

  • https://oauth.live.com/authorize?client_id=CLIENT_ID&scope=SCOPES&response_type=code&redirect_uri=REDIRECT_URL

パラメーターは次の通りです。

名前説明
client_idクライアントID
scopeスコープ
複数の場合はスペース(URLエンコード「%20⁠⁠)でつなげます。
例: wl.signin%20wl.basic
response_typeレスポンスの種類
認可コードの場合 code
redirect_uriリダイレクトURL
ドメインは登録情報と一致している必要があります。

さらに次のパラメーターもオプションで指定できます。

名前説明
display認可画面の表示形式
popup, touch
locale認可画面の国・地域情報
例: ja
stateアプリで使用する任意の値
指定した場合,認可サーバーからのリダイレクトURLに同値が含まれます。

display=touchを指定すると,モバイル端末向けのデザインになります。

図3 モバイル端末向けの表示

図3 モバイル端末向けの表示

認可サーバーがリダイレクトしたとき,codeパラメーターに認可コードが含まれています。

  • http://example.jp/callback.php?code=[AuthorizationCode]

認可コードを取得するまでのPHPコードは,次のようにしました。認可画面へのリンクをコードで生成しています。

<?php
    define('CLIENT_ID',     'xxxxx');
    define('CLIENT_SECRET', 'xxxxx');
    define('REDIRECT_URI',  'http%3A%2F%2Fexample.jp%2F');

    if (isset($_GET['code'])) {
        // (認可コードからアクセストークン取得 処理を記述)
    }

    if (!$msg) {
        $signInUri = 'https://oauth.live.com/authorize' .
            '?client_id=' . CLIENT_ID .
            '&scope=wl.signin&20wl.offline_access' .
            '&response_type=code' .
            '&display=popup' .
            '&locale=ja' .
            '&redirect_uri=' . REDIRECT_URI;
    }
?>
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8" />
        <title>Server-Side Sample</title>
    </head>
    <body>
        <?php
        if ($signInUri) {
        ?>
        <div><a href="<?php echo $signInUri; ?>">サインイン</a></div>
        <?php
        } else {
            echo $msg;
        }
        ?>
    </body>
</html>

define部分はアプリにあわせて変更してください。上記のコードは,リダイレクト先を同じページとして処理を記述しています。

アクセストークンの取得

次は,アクセストークンを取得します。次のURLへHTTP POSTメソッドでアクセスします。

  • https://oauth.live.com/token?client_id=CLIENT_ID&redirect_uri=REDIRECT_URL&client_secret=CLIENT_SECRET&code=AUTHORIZATION_CODE&grant_type=authorization_code

パラメーターは次の通りです。

名前説明
client_idクライアントID
redirect_uriリダイレクトURL
ドメインは登録情報と一致している必要があります。
client_secretクライアントシークレット
code認可コード
grant_type認可コードを使用する場合
authorization_code

レスポンスは,JSON形式で次のような内容になります。

{
    "access_token": "xxxxx",
    "refresh_token": "xxxxx",
    "expires_in": 3600,
    "scope": "wl.signin wl.offline_access",
    "token_type": "bearer"
}

アクセストークン(access_token)のほかに,有効期限(expires_in)の秒数なども含まれています。リフレッシュトークン(refresh_token)は,スコープにwl.offline_accessを指定した場合に含まれています。

著者プロフィール

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

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

URL:http://katamari.jp