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. Microsoft Graph

    [Google Apps Script]Office 365 unified APIを使ってメールを…

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

  2. Google関連

    [Google Apps Script]URL Shortener APIを使って短縮URLを取得す…

    2015/7/14 追記:いつの間にかAPIの呼び出しにAPI…

  3. Office関連

    Google翻訳で文字列を翻訳するマクロ

    ※ 2016/2 時点では下記の方法はもう使用できなくなっています。V…

  4. Google関連

    Google Forms APIが正式リリースされたのでさっそく試してみました。

    アンケート等で使用する機会が多いGoogleフォームを、API経由で作…

  5. Google関連

    「GAS Station #2」に参加してきました。

    昨日(2015/10/9)行われたGAS(Google Apps Sc…

  6. Google関連

    [Google Apps Script]スプレッドシートのセル範囲に指定した値が含まれているかを判定…

    先日、もり(@moripro3)さんから、「スプレッドシートの二次元配…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP