Google関連

[Google Apps Script]認証が必要なウェブアプリケーションを外部から実行する

Google Apps Scriptでは、作成したコードをウェブアプリケーションとして公開することができます。
具体的な手順については、タカハシ(@ntakahashi0505)さんがブログでまとめられているので、そちらが参考になるかと思います。

公開したウェブアプリケーションは下記サイトのようにWeb APIのように使えるわけですが、アクセス可能なユーザーを指定していると認証が必要になり、curl等で直接叩くことができなくなります。

今回はリクエストヘッダーに認証情報を追加して、GASのウェブアプリケーションを外部から実行する方法を紹介します。

アクセスできるユーザーを指定しない場合の動作確認

まずは、ウェブアプリケーションにアクセス可能なユーザーを指定しない場合の動作を確認してみます。

  1. POSTした値を返すだけの簡単なコードを貼り付け、プロジェクトを保存します。
  2. function doPost(e) {
      return ContentService.createTextOutput(e.postData.contents);
    }
  3. 公開」メニューから「ウェブ アプリケーションとして導入」をクリックします。
  4. アプリケーションにアクセスできるユーザー」を「全員(匿名ユーザーを含む)」として、「導入」ボタンをクリックします。下記画像はテスト環境の都合上、UIが一部英語になっています。
  5. ウェブ アプリケーションとして導入」画面上にアプリのURLが表示されるので、コピーしておきます。
  6. 手順4.でコピーしたURLに対してcurlコマンドでPOSTすると、意図した通りにPOSTした値が返ってくることが確認できます。URLさえ分かっていれば誰でもアクセスできる設定なので、当たり前と言えば当たり前の挙動です。
  7. curl -L -d "Hello world." "https://script.google.com/macros/s/***/exec"

アクセスできるユーザーを指定した場合の動作確認

次は、ウェブアプリケーションにアクセス可能なユーザーを指定した場合の動作を確認してみます。

  1. 公開」メニューから「ウェブ アプリケーションとして導入」をクリックします。
  2. アプリケーションにアクセスできるユーザー」を「全ユーザー」として、「更新」ボタンをクリックします。
  3. 再びcurlでPOSTしてみると、POSTした値ではなくHTMLが返ってきます。一部文字化けしているので分かりづらいですが、どうやら認証画面が返ってきているようです。
  4. curl -L -d "Hello world." "https://script.google.com/macros/s/***/exec"

アクセストークンを指定してリクエストを送信

認証が必要な場合、どのようにリクエストを送信すれば良いか?
結論から言ってしまうと、“Authorization: Bearer ヘッダーにアクセストークンを含めれば良い”わけです。

アクセストークンの取得

アクセストークンは、ScriptApp.getOAuthToken()メソッドで取得できます。

  1. 下記コードを貼り付け、「myFunction」を実行します。一行目のコードは、Drive APIを使用するためのスコープの追加用に入れているコードです。
  2. function myFunction() {
      Logger.log(DriveApp.getRootFolder().getName());
      Logger.log(ScriptApp.getOAuthToken());
    }

  3. 画面の指示に従って、リクエストを許可します。
  4. 処理完了後にログを見ると、ウェブアプリケーションにアクセスするためのアクセストークンが表示されているので、コピーしておきます。
認証が必要な場合のリクエスト送信

アクセストークンが取得できたので、Authorization: Bearer ヘッダーを含めてリクエストを送信してみます。

curl -L -d "Hello world." -H "Authorization: Bearer *** access token ***" "https://script.google.com/macros/s/***/exec"

今度は意図した通りにPOSTした値が返ってきました。

参考Webサイト

Google Apps Scriptのウェブアプリケーションについては、棚池氏がまとめられている下記サイトが非常に参考になりました。この場を借りて、御礼申し上げます。

関連記事

  1. Google関連

    【2018年9月版】Google API ConsoleでクライアントIDとクライアントシークレット…

    GoogleのAPIを呼び出すにあたり、クライアントIDとクライアント…

  2. Google関連

    [Google Apps Script]OAuth認証(2.0)が必要なWeb APIを利用する。

    前回の記事ではGoogle Apps Scriptを使ってWebアプリ…

  3. Google関連

    [Google Apps Script]箇条書きと番号付きリストを設定する

    Google スライドでは、段落に対して箇条書きと番号付きリストを設定…

  4. Google関連

    Google Docs API v1を試してみました。

    下記TechCrunchの記事によると、Google ドキュメントの新…

  5. Google関連

    [Google Apps Script]Google フォームとkintoneを連携させる方法

    Webフォームで入力された回答を、直接kintoneのアプリに保存した…

  6. Office関連

    Gmail APIを使ってメール送信するVBAマクロ(3)

    前回、前々回とGmail APIを扱ってきましたが、今回は前々回の記事…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP