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

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

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

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

Q&A

解決済

1回答

5340閲覧

GASのウェブアプリ・実行可能APIのどちらかで、実行時にGoogleアカウントのユーザ認証を行いたい

k.a_teratail

総合スコア845

Google Apps Script

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

0グッド

2クリップ

投稿2021/12/19 08:36

編集2021/12/31 07:36

実現したいこと

GASのウェブアプリ・実行可能APIのどちらかで、実行時にGoogleアカウントのユーザ認証を行いたいです。

イメージ説明
ウェブアプリでデプロイ時に、上記の設定で行うと、curlPostman での実行は可能になりますが
「アクセスできるユーザ」が「全員」なので、セキュリティ的に危ないと指摘が出ました。


そこで
イメージ説明
※API実行者の「実行ユーザ」、アクセスできるユーザは「組織内の全員」にする必要があり。

上記のように変更した状態でデプロイを行いましたが、curlPostman で、APIが実行されませんでした。

この設定を行なった状態で、APIの単体確認(ターミナルからcurl、アプリのPostmanでの実行)が可能になるようにしたいです。
また、最終的には、WebページのJavaScriptからAPIの実行が行われる想定になります。

発生している問題・エラーメッセージ

sh

1# パラメータを渡しているが特に意味はない 2$ curl -H "Content-Type: application/json" -d '{"test":"check"}' -L https://script.google.com/macros/s/AKfycbwip-qVOCYRmiBZVbkkH9n-7P9YRir9I5VZGOoLbdmGKKNnWvdKTmOkZfViGuvQY24E-Q/exec 3# なぜかHTMLコードが返ってくる 4$ <!DOCTYPE html><html lang="ja"><head><meta name="description" content="ウェブ ワープロ、プレゼンテーション、スプレッドシート"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0"><link rel="shortcut icon" href="//docs.google.com/favicon.ico"><title>ページが見つかりません</title><meta name="referrer" content="origin"><link href="//fonts.googleapis.com/css?family=Product+Sans" rel="stylesheet" type="text/css" nonce="14ECjqySv4xQyN1NsLGKhw"><style nonce="14ECjqySv4xQyN1NsLGKhw">/* Copyright 2021 Google Inc. All Rights Reserved. */ 5.goog-inline-block{position:relative;display:-moz-inline-box;display:inline-block}* html .goog-inline-block{display:inline}*:first-child+html .goog-inline-block{display:inline}#drive-logo{margin:18px 0;position:absolute;white-space:nowrap}.docs-drivelogo-img{background-image:url('//ssl.gstatic.com/images/branding/googlelogo/1x/googlelogo_color_116x41dp.png');background-size:116px 41px;display:inline-block;height:41px;vertical-align:bottom;width:116px}.docs-drivelogo-text{color:#000;display:inline-block;opacity:0.54;text-decoration:none;font-family:'Product Sans',Arial,Helvetica,sans-serif;font-size:32px;text-rendering:optimizeLegibility;position:relative;top:-6px;left:-7px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (-webkit-min-device-pixel-ratio:1.5),(min-resolution:144dpi){.docs-drivelogo-img{background-image:url('//ssl.gstatic.com/images/branding/googlelogo/2x/googlelogo_color_116x41dp.png')}}</style><style type="text/css" nonce="14ECjqySv4xQyN1NsLGKhw">body {background-color: #fff; font-family: Arial,sans-serif; font-size: 13px; margin: 0; padding: 0;}a, a:link, a:visited {color: #112ABB;}</style><style type="text/css" nonce="14ECjqySv4xQyN1NsLGKhw">.errorMessage {font-size: 12pt; font-weight: bold; line-height: 150%;}</style></head><body><div id="outerContainer"><div id="innerContainer"><div style="position: absolute; top: -80px;"><div id="drive-logo"><a href="/"><span class="docs-drivelogo-img" title="Google ロゴ"></span><span class="docs-drivelogo-text">&nbsp;ドライブ</span></a></div></div><div align="center"><p class="errorMessage" style="padding-top: 50px">現在、ファイルを開くことができません。</p><p>アドレスを確認して、もう一度試してください。</p><div style="background: #F0F6FF; border: 1px solid black; margin-top: 35px; padding: 10px 125px; width: 300px;"><p><strong>あれもこれも Google ドライブで</strong></p><p> Google ドライブにはドキュメントやスプレッドシート、プレゼンテーションなどを簡単に作成、保存してオンラインで共有できるアプリが揃っています。</p><p>詳細は<a href="https://drive.google.com/start/apps">drive.google.com/start/apps</a>をご覧ください。</p></div></div></div></div></body><style nonce="14ECjqySv4xQyN1NsLGKhw">html {height: 100%; overflow: auto;}body {height: 100%; overflow: auto;}#outerContainer {margin: auto; max-width: 750px;}#innerContainer {margin-bottom: 20px; margin-left: 40px; margin-right: 40px; margin-top: 80px; position: relative;}</style></html>

該当のソースコード

gs

1function doPost(e) { 2 return ContentService.createTextOutput(JSON.stringify({"test":"check"})) 3}

その他

正常実行時

「実行者」が「自分」で
「アクセスできるユーザ」が「全員」の時

sh

1$ curl -H "Content-Type: application/json" -d '{"test":"check"}' -L https://script.google.com/macros/s/AKfycbwip-qVOCYRmiBZVbkkH9n-7P9YRir9I5VZGOoLbdmGKKNnWvdKTmOkZfViGuvQY24E-Q/exec 2$ {"test":"check"}

組み合わせ
イメージ説明

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

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

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

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

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

hiroshi0240

2021/12/20 08:54

「実行ユーザ」、アクセスできるユーザは「組織内の全員」にする必要がありとのことですが、実行ユーザーは自分のままで良いのでは無いでしょうか? またユーザー認証を行うのであれば、実行前にログインユーザーを確認して弾くのが確実かと思います。
k.a_teratail

2021/12/20 15:25

> 実行ユーザーは自分のまま 当初はその予定でしたが、作成するAPIの処理には、Googleドライブにフォルダ、ファイル作成を行います。 その時に、フォルダ、ファイルのオーナーをAPI実行者にしたいので、実行ユーザは「自分」以外を選択しています。 また、誰が実行したかのログも取る予定なので、「自分」だと、自分のアカウントしかログに出力されないため、「ウェブアプリケーションにアクセスしているユーザ」でAPIを実行できるようにしたいです。 > 実行前にログインユーザーを確認して弾く こちらについては、htmlページなどでGoogleアカウント認証を行うということでしょうか? htmlページの作成は行わない想定です。 また、gas コードでのログインユーザ確認は `Session.getActiveUser().getEmail()` を、APIの戻り値に設定してみましたが、curl や Postman で実行しても何も返ってきませんでした。
guest

回答1

0

ベストアンサー

アクセスユーザーを指定した場合、認証画面が呼ばれるのでHTMLで帰ってくるのは仕様と思います。リンク先を参考にアクセストークンを含めてcurlしてあげれば解決できるのではないでしょうか。
https://www.ka-net.org/blog/?p=12258

ただ、実行ユーザーを自分以外にするとこれだけで済まない部分も出てくると思われます。
アクセスユーザーのアカウントがわかる方法(Session.getActiveUser()で取れるはずなんですけど。)を考えて、作成後ファイル等のオーナー変更などで対応するほうが良いと思います。

投稿2021/12/21 09:23

hiroshi0240

総合スコア640

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

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

k.a_teratail

2021/12/31 07:36 編集

ご回答ありがとうございます。 リンク先を参考にした結果、HTMLではなく、任意の戻り値が帰ってくることが確認できました。 しかし ### curl実行ユーザ確認コード ```js function doPost(e) { let email = Session.getActiveUser().getEmail() return ContentService.createTextOutput(email) } ``` ### 実行した環境 ``` •PC A 組織内アカウント(スクリプトオーナー) •PC B 組織外アカウント(スクリプト非共有アカウント) ``` PCは2台、それぞれ別のアカウントを所持 ### 組み合わせと実行結果 https://teratail-v2.storage.googleapis.com/uploads/contributed_images/ccac1063af3791ace9e81fc1b0ec53f7.png 私が想定していた結果とは違いました。 別の方法で実施するしか無いようです。 できるかは分かりませんが、 「Google Cloud Platform」との連携でアカウント認証させ、GASコードを実行させる もしくは、 「https://accounts.google.com/o/oauth2/auth」(https://developers.google.com/identity/protocols/oauth2) OAuth2でのアカウント認証を行い、GASコードの実行。 こちらの場合はcurlでの確認は不可能 もう時間がありませんが、試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問