以前のログイン方法を使用できなくなった

Docker内のclaspコマンドにログインする場合OAuth認証を利用するがDocker内のブラウザを開くことができないため、

clasp login --no-localhost

コマンドで返されるURIにアクセスして生成されるトークンをコピーペーストで入力することでログインしていた。

この帯域外フローはリモートフィッシングのリスクがあるため2022年10月03日から非推奨となった。

現在は上記のコマンドでログインしようとすると下記のエラーになる。

Access blocked: clasp – The Apps Script CLI’s request is invalid

You can’t sign in because clasp – The Apps Script CLI sent an invalid request. You can try again later, or contact the developer about this issue. Learn more about this error

Error 400: invalid_request

The out-of-band (OOB) flow has been blocked in order to keep users secure. Follow the Out-of-Band (OOB) flow migration guide linked in the developer docs below to migrate your app to an alternative method.

リダイレクトURIに直接アクセスする

オプションを付けずにバックグラウンドでclasp loginを実行し、返されるURIにローカルのブラウザでアクセスしてリダイレクトURIにDocker内でcurlコマンドでアクセスすることでログインできる。

curlコマンドのレスポンスが返ってくるとプロセスが終了してしまうためwaitコマンドで`バックグラウンドプロセスの終了を待つ必要がある。

FROM node:18-alpine3.16
RUN apk add curl && \
    npm -v && \
    npm i -g @google/clasp
WORKDIR /app
ENTRYPOINT [ "clasp" ]
services:
  clasp:
    build: .
    volumes:
      - login:/root
      - $PWD:/app
volumes:
  login:
    driver: local
$ docker compose run --rm --entrypoint sh clasp -c $'clasp login & \n read url \n curl $url \n wait'
> Logging in globally…
> 🔑 Authorize clasp by visiting this url:
> https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&scope={SCOPE}&response_type=code&client_id={CLIENT_ID}&redirect_uri=http%3A%2F%2Flocalhost%3A{PORT}
>
< http://localhost:{PORT}/?code={CODE}&scope={SCOPE}&authuser=0&hd={DOMAIN}&prompt=consent
> Logged in! You may close this page. Authorization successful.
>
> Default credentials saved to: /root/.clasprc.json.