min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

PHP OneDriveへOAuth2.0認証で接続成功

 

前回記事の続き。

min117.hatenablog.com

PHPでOAuth2.0認証し、OneDriveのユーザー情報やフォルダ情報を表示するところまで成功した。

 

OAuth認証の処理イメージは以下図のとおり。

全体図

f:id:min117:20160403150730p:plain

 

今回のプログラムでは、全体図内にある「クライアント=Webアプリサーバー」として、自宅サーバjitakusrv)を使って進める。

 

前準備

 マイクロソフトの開発者サイトに行って、開発者登録を行う。

 https://account.live.com/developers/applications/

 このとき「リダイレクトURL」を入力しないといけないので、自宅サーバのURLを入力する(入力内容は後で変えられるから、仮の文字列でもOK)。

今回は「http://jitakusrv/RESTful/callback.php」とした。

f:id:min117:20160403153447p:plain

処理開始

 まずは自宅サーバにあるgetCode.phpを叩く(全体図内のWebアプリサーバー)

 例:http://jitakusrv/RESTful/getCode.php

f:id:min117:20160403160117p:plain

getCode.php は、Microsoft LiveConnectサーバ(oauth.live.com)に、認可コードをよこせと要求する。

getCode.php(抜粋)

f:id:min117:20160403151854p:plain

②LiveConnectサーバーは、認可コードを渡していいかの認証画面を出す(全体図内の②。アプリ利用者=リソースオーナー による認証)

f:id:min117:20160403152127p:plain

③認証がOKだったら、LiveConnectサーバーは認可コードを発行し、前準備の際に開発者登録画面で入力した「リダイレクトURL」に向けて返す

 

④リダイレクト先に指定されたサーバ(jitakusrv)では、返ってきた認可コードcallback.phpで受け取る。

f:id:min117:20160403160117p:plain

callback.php(抜粋) ※ 認可コード受け取り

f:id:min117:20160403154901p:plain

⑤認可コード($code)を受け取った callback.php は、そのコードを利用して「アクセストークンを要求するためのPOST文」を生成し、LiveConnectサーバにPOSTする。

それを受け取ったLiveConnectサーバは アクセストークン(access_token)を返す。

callback.php(抜粋)※ POST文の作成→LiveConnectサーバへPOST→access_token取得

f:id:min117:20160403155309p:plain

アプリケーションサーバは、アクセストークン(かなり長い文字列)を使って、LiveConnectサーバ(全体図内のリソースサーバー/apis.live.net)に情報をよこせと要求する。

callback.php(抜粋) ※ LiveConnectサーバにOneDriveのユーザー情報を要求

f:id:min117:20160403162012p:plain

参考

 ユーザー情報の取得:Getting user data (REST)

 アルバム情報の取得:Create, update, read, or delete albums on OneDrive (REST)

 ファイルのDL/UP:Downloading and uploading files on OneDrive (REST)

 

実際に処理を走らせてみる。

ブラウザから自宅サーバにアクセスし getCode.php をクリックすると…

f:id:min117:20160403160117p:plain

ブラウザにリダイレクトされ、callback.phpが呼ばれる(見た目上は単なる読み込みに見える)。

f:id:min117:20160403162922p:plain

最後にリソース(OneDriveの中身/今回はユーザー情報)が返ってくる。

f:id:min117:20160403162610p:plain

ーーー

これで、PHPからOneDriveのリソースの取り方が分かった。データはJSON形式で返ってくるらしい。これを使って、次回はOneDrive内のフォルダ&ファイルの一覧取得を試す。