質問: Google Spreadsheetsにアクセスするための簡易APIサーバーのようなものを簡単に作れるということで、Google Apps Scriptのウェブアプリを試してみましたが、どうも意図するように動かないというか、もやもやした部分が出てきました。 公式のリファレンスも含め、いろいろ情報を探してみましたが、スキルが低いせいか、希望する情報にたどり着けなかったので、よろしければご教授ください。 ### CORSには未対応? 外部サーバーに配置したフロントエンドから、postしようとしたところ、CORSヘッダー関連のエラーになりました。 とりあえず、fetchのモードを"no-cors"にすることで、postに関する動作(特定セル情報の更新)はできましたが、そのせいでresponseが得られないので、終了判定ができない状態です。 そもそも、CORSも理解できていないかも・・・ですが・・・、GASに特定の外部オリジンを信用させるための設定をすることはできるのでしょうか? ### doGet()でフロントエンドを配信することが前提? だとすると、プロジェクトに特定の拡張子しか収められないことに、まぁまぁ違和感があります・・・笑 HTMLのみ配信し、他のリソースは外部サーバーから取得するのか、拡張子を変更したりして、むりやりプロジェクトに含めるという方法しかないのでしょうか? どちらにしても、フロントエンドのフレームワークを利用したりする場合は、面倒な作業が付きまとう気がします・・・ ### 認証のメカニズムは? ウェブアプリケーションとして導入、する際に、アプリケーションにアクセスできるユーザーを「自分だけ」にした場合、期待する動作として、該当するSpreadsheet(もしくはScript自体?)の所有者のみ実行できることだと解釈しています。 ただ、その場合、所有者であることを、フロントエンド側から、どうやって示せば良いのかはっきりとわかりません。 なんとなく、Chromeであれば、ログインユーザーであったり、他のブラウザであれば、Googleへのログインであったり、するようなのですが・・・ ログインしても、動く時と動かない時があり、その原因がはっきりしませんでした。 そもそも、どんな仕組みで認証することになるのでしょうか?(OAuthあたり、じゃないかな・・・ぐらいの、知識・・・です・・・泣) 私自身の知識が、たくさん足りないことが原因ではありますが、とくに認証周りなどは、知識を得るための入り口もわかっていない状態だったりします(^_^;) ここを勉強すれば良いとか、この情報を読んでみて、とかでも助かりますので、どうかアドバイスをいただければありがたいです。 よろしくお願いします。
回答: いろいろ調べてみましたが、最終的にはdoPost()は希望通りに使えない・・・だろう・・・という結論に至りました。 CORSの回避(Post時のPreflightで送られるoptionの抑止)は、RequestHeaderのContent-Typeをtext/plainにすることでできました。 認証情報は、Cookieに保存されていて、fetchのoption、credentials: "include"を指定することで、Postに載せることができました。(これは、実施済みでしたが、仕組みを知らずに使ってましたw) ただし・・・上記二つを実施してPostをしても、Spreadsheetへの書き込みはできますが、Responseがブラウザでブロックされます。結果的にはno-corsと同じですね・・・ ResponseHeaderのAccess-Control-Allow-Originが*で戻ってくるのですが、 credentialsをincludeにした場合は、*を許可しないそうです・・・ GoogleCloudPlatformのプロジェクトに設定されている認証情報に、Originを設定できるっぽい箇所(承認済みの JavaScript 生成元)があるのですが、Google Apps Scriptが自動で追加したものでは、変更の権限がないようでOriginを追加することができませんでした。 この時点で、Googleがサービスとして明らかに抑止していると感じたので、これ以上調査するのをやめました。