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

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

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

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

解決済

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

k.a_teratail
k.a_teratail

総合スコア256

Google Apps Script

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

1回答

0評価

2クリップ

707閲覧

投稿2021/12/19 08:36

編集2022/01/12 10:55

実現したいこと

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

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


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

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

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

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

sh

# パラメータを渡しているが特に意味はない $ curl -H "Content-Type: application/json" -d '{"test":"check"}' -L https://script.google.com/macros/s/AKfycbwip-qVOCYRmiBZVbkkH9n-7P9YRir9I5VZGOoLbdmGKKNnWvdKTmOkZfViGuvQY24E-Q/exec # なぜかHTMLコードが返ってくる $ <!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. */ .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

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

その他

正常実行時

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

sh

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

組み合わせ
イメージ説明

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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 で実行しても何も返ってきませんでした。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Google Apps Script

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