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. Office関連

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

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

  2. Google関連

    [Google Apps Script]スプレッドシートで不要な空白文字を削除する

    スプレッドシートでは、「データ」メニューにある「空白文字を削除」を実行…

  3. Google関連

    Gmail APIを使ってメール送信するC#コード

    「たまには.NET用のライブラリを使ってGoogle APIでも触って…

  4. Google関連

    [Google Apps Script]選択文字列を翻訳する

    Google Apps Scriptでドキュメント上で選択している…

  5. Google関連

    [Google Apps Script]メールからMessage-IDヘッダーを取得する

    はけた(@excelspeedup)氏のツイートで、GASでメールのM…

  6. Office関連

    Google TTSで文字列を読み上げるExcelアドイン

    前回の記事で書いたGoogle TTSで文字列を読み上げるマクロ(言語…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP