質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

0回答

1267閲覧

認証ありのdoPostの実現

yoshio1

総合スコア5

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

2クリップ

投稿2019/10/17 07:10

実現したいこと

curlから認証ありのdoPostのAPIを叩く

前提

現在、GoogleAppsScriptのdoPostを利用して、POSTデータからgoogleフォームを自動作成してフォームの公開用URL等を返すAPIを利用しています。
公開方法は、
公開 → webアプリケーションとして公開 → アプリケーションにアクセスできるユーザ:全員(匿名ユーザを含む)
として、googleアカウントにログインしていないユーザでも、urlを知っていればAPIを叩ける状況になっています。
(というよりも、curlを利用してAPIを叩いているので、匿名で叩けるようにしています)

今は個人用のgoogleアカウントで運用しているので何も問題はありませんが、
、このAPIを、会社で利用しているのGoogleアカウントで実行する必要が出てきました。
この場合、アプリケーションにアクセスできるユーザの選択肢として、自分か、会社に所属するアカウントのみ となってしまい、
curl等の匿名からAPIを叩けない状況になっています。

アプリケーションにアクセスできるユーザは自分だけでいいのですが、curl等で、どのようにして自分がこのアカウントの所有者であることを証明すれば良いのでしょうか。

doPostではなく、doGetでも同様で、
このアカウントでログインしているブラウザであれば、
「現在のウェブアプリケーションのURL」を叩けるのですが、
curl等だと、当たり前ですがgoogleアカウントのログイン画面に飛ばされてしまいます。

なにかしらのトークン等を発行してHTTPヘッダーに持たせることで、
curlから自分がこのアカウントの所有者であることを証明する方法などは存在するでしょうか。
もしくは、これと同等の機能を、何かしらの代替手段で実現する方法はあるでしょうか。

GASに詳しい方や、経験のある方、すこしでも参考になりそうな情報を持っている方がいらっしゃいましたら、
教えていただけると幸いです。

よろしくお願いします。

試したこと

ExecutionAPI(Apps Script API?)であれば認証ありのAPIを作成できるようなのですが、
トークン等を発行してcurlから叩けるまでには至っていません。

このスクリプトで必要な OAuth スコープ

https://www.googleapis.com/auth/forms

該当のソースコード

GAS

1 2function doPost(e) { 3 4 var postData = JSON.parse(e.postData.getDataAsString()); 5 if (postData.title) { 6 const title = postData.title; 7 const description = postData.description; 8 } else { 9 // タイトルがない場合はエラーを返す 10 11 var returnData = ContentService.createTextOutput(); 12 returnData.setMimeType(ContentService.MimeType.JSON); 13 returnData.setContent( 14 JSON.stringify({ 15 message: 'please input title!', 16 error: true, 17 }) 18 ); 19 return returnData; 20 } 21 22 // フォーム作成 23 var form = FormApp.create(title); 24 form.setDescription(description); 25 26 var items = postData.items; 27 var itemIdList = [] 28 29 while (items.length) { 30 var item = items.shift(); 31 var textItem = form.addTextItem(); 32 textItem 33 .setTitle(item.question); 34 itemIdList.push({ 35 question: item.question, 36 item_id: textItem.getId(), 37 }); 38 } 39 40 var returnData = ContentService.createTextOutput(); 41 returnData.setMimeType(ContentService.MimeType.JSON); 42 returnData.setContent( 43 JSON.stringify({ 44 published_url: form.getPublishedUrl(), 45 edit_url: form.getEditUrl(), 46 error: false, 47 form_id: form.getId(), 48 item_id_list: itemIdList, 49 }) 50 ); 51 return returnData; 52}

postdata

1{ 2 "title": "〇〇のアンケート", 3 "description": "これはアンケートです。", 4 "items": [ 5 { 6 "question": "会員ID" 7 }, 8 { 9 "question": "名前" 10 }, 11 { 12 "question": "電話番号" 13 } 14 ] 15}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問