clasp login --no-localhostができない
背景
Gmailの自動整理としてGAS(Google Apps Script)を使用しているのですが、せっかく最近Gitを覚えたしGitで管理できるようにしたいと思ってました。 調べてみるとclaspという環境を使用すると、CLIからGASを管理できるようになるとのこと。 ではDockerで環境構築して管理してきますか!と意気込んてたのですが、一番最初のloginの段階でうまくいかない状態です。
Dockerfile
FROM node:slim RUN npm i @google/clasp -g CMD ["/bin/bash"]
以下を参考にさせてもらってます。 gasを管理するclaspのdocker環境を作成する - Qiita
build/run/clasp login実行
実行したのが以下です。
# docker build . -t clasp:latest Sending build context to Docker daemon 4.096kB Step 1/3 : FROM node:slim ---> 72150548d9e3 Step 2/3 : RUN npm i @google/clasp -g ---> Running in 7474b17f5cfb added 264 packages, and audited 265 packages in 20s 80 packages are looking for funding run `npm fund` for details found 0 vulnerabilities npm notice npm notice New major version of npm available! 8.19.3 -> 9.1.1 npm notice Changelog: <https://github.com/npm/cli/releases/tag/v9.1.1> npm notice Run `npm install -g npm@9.1.1` to update! npm notice Removing intermediate container 7474b17f5cfb ---> 4670be7b9b25 Step 3/3 : CMD ["/bin/bash"] ---> Running in cd1277eb5550 Removing intermediate container cd1277eb5550 ---> 0c90541ed382 Successfully built 0c90541ed382 Successfully tagged clasp:latest # docker run -it clasp root@7bad27bd043e:/# clasp login --no-localhost Logging in globally… 🔑 Authorize clasp by visiting this url: https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fscript.deployments%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fscript.projects%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fscript.webapp.deploy%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.metadata.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.file%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fservice.management%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Flogging.read%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&response_type=code&client_id=1072944905499-vm2v2i5dvn0a0d2o4ca36i1vge8cvbn0.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob Enter the code from that page here:
ここまできたらあとは表示されたURLにアクセスして許可したら表示されるコードを入力すればよいはずなのですが、アクセスしたURLでは以下のような画面が。
はて。Google Apps Script APIもちゃんと事前にONにしてます。
また上記ログで表示されているnpm install -g npm@9.1.1
もあとでDockerfileに追記して実行してみても同じ結果です。
試しに--no-localhost
のオプションを外して実行してみると何やら成功しそうな画面が表示されます。
ただしこれはclaspを実行した環境でGUIが使用できる場合のコマンドのため、そのまま許可しようとしてもhttp://localhost:<port>/?code=xxxxxxxxxxxxxxx
のURLに飛ばされるため失敗します。
エラー内容確認
このまま試行錯誤しても解決しなさそうなので、諦めてエラー内容などを詳細に確認してみます。 まずはエラーの詳細を読んでみます。
oobなんちゃらがブロックされていると。関連するデベロッパードキュメントとやらもざっと読んでみます。
影響を受けているかどうかの確認
→アプリが OOB フローを使用しているかどうかを判断する方法
→アプリケーション コードを調べる
Google OAuth 認証エンドポイントを呼び出すアプリケーション コードのセクションを確認し、redirect_uri パラメータに次のいずれかの値があるかどうかを確認します。
・redirect_uri=urn:ietf:wg:oauth:2.0:oob
・redirect_uri=urn:ietf:wg:oauth:2.0:oob:auto
・redirect_uri=oob
アクセス先のURLの末尾がredirect_uri=urn:ietf:wg:oauth:2.0:oob
になってますね。これか。。。
問題っぽいのはわかったのですが、ではどうすればいいのかと、サンプルリクエストを見てみると
https://accounts.google.com/o/oauth2/v2/auth? response_type=code& scope=<SCOPES>& state=<STATE>& redirect_uri=urn:ietf:wg:oauth:2.0:oob& client_id=<CLIENT_ID>
clasp触ったばかりだから全然わからーん、とめげつつURLにScopeとClientIDは記載されてますね。おそらくScopeが許可するサービス、ClientIDはClaspを示すものなんだと思います。あとStateはなんなんじゃ。
と色々調べてたら、この事象についてGithubでissuesになってるっぽい。なので改善されるまで保留かな、ってなってます。てか今記載しながら思ったけど、サンプルクエリだし、State無し版でURLにアクセスすればいいのか??
clasp login --no-localhost No Longer Working · Issue #948 · google/clasp · GitHub
※20221116追記 ↑アクセスするURLを編集すればどうこうできるものではなかったですね、、、