プログラミングノート

プログラミングの備忘録です

Google APIをPHPウェブアプリケーションから呼び出す(OAuth2.0証明書) 第4回

 今回は、作成済みのOAuth2.0証明書を使用して、PHPウェブアプリケーションからGoogle APIを呼び出します。

 Google APIのドキュメントが親切に書かれていて、私でもGoogle APIを使うことができました。

 

事前準備

1.プロジェクトの作成

Google APIを使用するための設定(プロジェクトの作成 ・ 使用するAPIの設定) 第1回 - プログラミングノートの「1.プロジェクトを作成」をご覧ください。

 

2.使用するAPIの設定

Google APIを使用するための設定(プロジェクトの作成 ・ 使用するAPIの設定) 第1回 - プログラミングノートの「1.プロジェクトで使用するAPIを設定」をご覧ください。

 

3. OAuth2.0証明書の作成(認証情報の登録)

Google API Google APIを使用するための設定(認証情報の登録) 第2回 - プログラミングノートの「OAuth2.0クライアントID」にて、
アプリケーションの種類に「ウェブアプリケーション」を指定して、OAuth2.0証明書を作成しました。

 

4.クライアントライブラリのインストール

クライアントライブラリをインストールするために「Composer」を使います。

まず、Composerをインストールします。

 1.php.iniで、openssl.dllを有効にします。

 2.Composerをインストールするディレクトリに移動します。

 3.コマンドプロンプトで下のコマンドを実行し、インストールします。

   php -r "eval('?>'.file_get_contents('https: //getcomposer.org/installer'));"

 4.コマンドプロンプトで下のコマンドを実行しcomposer.batをコピー作成します。

   echo @php "%~dp0composer.phar" %* >composer.bat

 5.Composerインストールディレクトリのパスを環境変数Pathに設定します。

 

次に、コマンドプロンプトで下のコマンドを実行し、クライアントライブラリをインストールします。

composer require google/apiclient:^2.0

 Composer実行ディレクトリがPHPインストールディレクトリと異なる場合、PHPインストールディレクトのパスを環境変数Pathに設定しておく必要があります。

 

最後に、インストールすると作成されるvendor/autoload.phpを、PHPファイルで読み込みます。

例)require_once '../ vendor/autoload.php';

 

 

手順

1.クライアントオブジェクトを作成
2.OAuth2.0サーバーへユーザーをリダイレクト
3.OAuth2.0サーバーからの返信を処理
4.Google APIを呼び出す

 

1.クライアントオブジェクトを作成

 

 クライアントオブジェクトを生成し、生成したクライアントオブジェクトに下の3点をセットします。

  1. OAuth2.0証明書を作成した時、ダウンロードしたjsonファイル
  2. アクセスをリクエストする範囲
  3. エンドポイント(OAuth2.0サーバ―からユーザーが転送されるページ)

 

(※サンプルコード)
Googleドライブへ読み取り専用でアクセス
$client = new Google_Client();
$client->setAuthConfig('client_secrets.json');
$client->addScope(Google_Service_Drive::Drive_METADATA_READONLY);
$client->setRedirectUri('http:// '.$_SERVER['HTTP_HOST'].'/oauth2callback.php');

 

<補足>

  • 「3. エンドポイント(OAuth2.0サーバ―からユーザーが転送されるページ)」は、認証画面で登録した「リダイレクトURI」です。
  • また、OAuth2.0証明書を作成した時ダウンロードしたjsonファイルには、「リダイレクトURI」が書かれていますので、認証情報の「リダイレクトURI」を修正した場合は、再度jsonファイルをダウンロードする必要があります。

 

 

2.OAuth2.0サーバーへユーザーをリダイレクト

(リダイレクト:自動的に別ページへ転送)

 

 ユーザーデータにアクセスする必要がある場合、ユーザーをOAuth2.0サーバへリダイレクトします。リダイレクト後、OAuth2.0サーバーはユーザーを認証します。さらに、OAuth2.0サーバーはユーザーにユーザーデータへのアクセスの同意を確認します。

 

 まずOAuth2.0サーバーへユーザーをリダイレクトするためのURLを作成し、次にユーザーをリダイレクトします。
 

(※サンプルコード)
$auth_url = $client->createAuthUrl();
header('Location:'.filter_var($auth_url, FILTER_SANITIZE_URL));

 

 

3.OAuth2.0サーバーからの返信を処理

 OAuth2.0からの返信は「1.クライアントオブジェクトを作成」でsetRedirectUriメソッドによりセットしたURIに届きます。
 ユーザーが同意した場合は、認可コードが送信され、ユーザーが同意しなかった場合は、エラーメッセージが送信されます。

▼同意してもらった場合
https:// oauth2.examle.com/auth?code=4/P7q・・・・7W91a-oMsCe

▼同意してもらわなかった場合
https:// ouath2.examle.com/auth?error=access_denied

 


 まず認可コードをアクセストークンと交換し、次にアクセストークンを取得します。

(※サンプルコード)
$client->authenticate($_GET['code']);
$access_token=$client->getAccessToken();

 

4.Google APIを呼び出す 

まず、アクセストークンをユーザーのセッションに保存するため、クライアントオブジェクトにアクセストークンをセットします。
 次に、使用するAPIのコンストラクタにクライアントオブジェクトを指定し、サービスオブジェクトを作ります。
 最後に、サービスオブジェクトのインタフェースを使って、APIサービスへ要求します。

 

(※サンプルコード)
$client->setAccessToken($access_token);
$drive_service = new Google_Service_Drive($client);

 

サービスオブジェクトのインタフェースを使う方法は、後日書きます。

 

 

※サンプルコード

 上記すべてのサンプルコードは、Google Identity PlatformのUsing OAuth 2.0 for Web Server Applicationsから引用しました。

 サンプルコードのライセンス:the Apace 2.0 License(htt://www.apache.org/licenses/LICENSES-2.0)


 

記事一覧

第1回 Google APIを使用するための設定(使用するAPIの選択)

第2回 Google APIを使用するための設定(認証情報の登録)

第3回 Google APIを使用するための設定(APIキーの作成)

第4回 Google APIPHPウェブアプリケーションから呼び出す

第5回 Google APIをPHPウェブアプリケーションから呼び出す(サービスアカウント)

第6回 Google APIへの問い合わせ状況と割り当てを確認する方法

第7回 Google APIをPHPウェブアプリケーションから呼び出す(APIキー)

 

参照

Google Identity Platform 「Using OAuth 2.0 for Web Server Applications」

https://developers.google.com/identity/protocols/OAuth2WebServer

 

◇ Composer https://getcomposer.org/

 

GitHub - google/google-api-php-client: A PHP client library for accessing Google APIs