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

Officeアプリケーションの「最近使用したファイル」を削除するVBScript前のページ

ヘッドレス ChromeとSeleniumBasicでWebページ全体のスクリーンショットを撮る方法次のページ

関連記事

  1. Google関連

    Google Apps ScriptでVoiceText Web APIを呼び出す。

    ・モヤさまのショウ君にいろいろ喋らせるVBAマクロ(1)//www…

  2. Google関連

    [Google Apps Script]Google ドライブにある画像をスライドに一括挿入する

    前回の記事では、Google ドライブにある1つの画像ファイルをスライ…

  3. Excel

    CDOを使ってGmail送信を行うVBAマクロ(UTF-8対応版)

    2年ほど前にCDOを使ってGmail送信を行うVBAマクロについて記事…

  4. Google関連

    以前のGoogle マップを使う。

    「「新しい Google マップ」正式公開、地図大きく、精緻すぎる3D…

  5. Google関連

    [Google Apps Script]拡張サービスを使用する。

    Google Apps Scriptでは「拡張サービス」(Advanc…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP