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

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

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

  2. Google関連

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

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

  3. Google関連

    [Google Apps Script]スライド画面いっぱいの大きさで動画を挿入する

    久しぶりのGoogle Apps Scriptネタです。今回はスラ…

  4. Google関連

    [Google Apps Script]郵便番号から住所を取得する自作関数と住所から地図画像のURL…

    郵便番号検索APIを使って郵便番号から住所を取得する自作関数と、Sta…

  5. Google関連

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

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

  6. Google関連

    [Google Apps Script]Webアプリケーションを作成する。

    Google Apps Scriptではスプレッドシートや文書上で動く…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP