おはようございます。まさきんです。
Google OAuth の公開ステータスが「テスト中」だと、リフレッシュトークンは7日で切れます。僕も健康データを取り込む個人用ツールで、この期限に気づきました。Gmail の制限付きスコープの審査とあわせて、本番環境に公開する手順を公式情報で整理しておきます。
※記事公開時点の情報です。最新の条件は公式サイトでご確認ください。
- 公開ステータスが「テスト中」で外部向けのアプリは、リフレッシュトークンが7日で失効します
- 個人ツールでも「本番環境」に公開すれば、7日の期限はかからなくなります
- 公開にはホームページとプライバシーポリシーのURLが要ります。連絡先メールだけでは足りません
- センシティブや制限付きのスコープは、本番でも審査前は未確認アプリの警告が出ます
- 6か月未使用やトークン数の上限など、7日以外にも失効する条件があります
7日で切れる仕組み
まず結論からです。Google の公式ドキュメントに、次の趣旨の記載があります。
外部ユーザー向けで、公開ステータスが「テスト中」のプロジェクト。ここで発行されたリフレッシュトークンは、7日で失効します。
例外もあります。要求するスコープが名前・メールアドレス・プロフィールだけの場合です。具体的には userinfo.email や userinfo.profile、openid の範囲に収まるときですね。Google でログインするだけのアプリなら、7日の期限はかかりません。
裏を返すと、Gmail やカレンダーのデータを読むアプリは対象です。健康系のデータも同じですね。個人用のスクリプトでも、外部ユーザータイプなら同じ扱いになります。
「テスト中」と「本番環境」の違い
公開ステータスは、Google Auth Platform の「対象」の画面で確認できます。以前の「OAuth 同意画面」にあたる場所です。2つの状態の違いをまとめると、次のとおりです。
| 項目 | テスト中(Testing) | 本番環境(In production) |
|---|---|---|
| 使える人 | 登録したテストユーザーだけ | Google アカウントを持つ全員 |
| テストユーザーの上限 | 100人まで | なし |
| 同意の有効期間 | 同意から7日で失効 | 7日の期限なし |
| リフレッシュトークン | 7日で失効 | 他の失効条件にかかるまで有効 |
| 同意前の警告 | テストアクセスの警告が出る | センシティブなスコープは審査前に警告 |
| 審査 | 対象外 | スコープによっては必要 |
テスト中は、あくまで開発用の状態という位置づけです。テストユーザーに加えた人だけが同意できて、その同意も7日で切れます。
一方で本番環境は、誰でも同意できる状態です。毎日自動で動かす個人ツールなら、本番環境のほうが運用に向いているかもしれません。
僕のツールで起きていたこと
僕のツールは、Google の Health 系の API を使っていました。プロジェクトの公開ステータスは「テスト中」のままでした。
なので、手元のリフレッシュトークンは発行から7日で切れる予定でした。切れると、自動の取り込みが止まってしまいます。そこで、ブランディングを埋めて「本番環境」に公開することにしました。
本番環境に公開する手順
公式ヘルプの流れと、僕が実際に通った順番をまとめます。
- Google Cloud コンソールを開き、画面上部のプロジェクト選択を確認する
- Google Auth Platform の「ブランディング」を開く
- アプリ名とユーザーサポートのメールを確認する
- アプリのホームページとプライバシーポリシーのURLを入れる
- 承認済みドメインに、そのURLのドメインを追加する
- デベロッパーの連絡先メールを入れて保存する
- 「対象」の画面で「アプリを公開」を押し、確認画面で進める
- 公開ステータスが「本番環境」になったことを確かめる
- ツール側でもう一度同意し、リフレッシュトークンを取り直す
公式ヘルプでは、承認済みドメインを先に登録するよう案内されています。ホームページなどのURLより前に入れておくと、手戻りが少ないかもしれません。
途中でつまずいた2つのこと
プロジェクトを取り違えていた
最初のつまずきは、地味なところでした。開いた Google Cloud コンソールが、別のプロジェクトだったんです。ブログのアクセス解析用に作ったほうでした。
Google Cloud のコンソールは、最後に開いたプロジェクトを覚えています。なので、何も考えずに開くと別の場所にいることがあります。画面上部のプロジェクト名を、作業の前に一度見る。これだけで防げる話でした。
個人でプロジェクトを複数持っていると、名前が似てきますね。用途がわかる名前にしておくのも、地味に効く対策かもしれません。
連絡先メールだけでは公開できない
2つめは、公開ボタンが有効にならなかったことです。最初は連絡先のメールだけ入れていました。
公開には、アプリのホームページとプライバシーポリシーのURLが必要でした。公式ヘルプにも、外部向けの本番アプリにはこれらのリンクが必須とあります。リンクが欠けていると、審査に出すこともできないそうです。
公開に必要だったもの
ブランディング画面で求められる項目を、公式ヘルプをもとに整理します。
| 項目 | 内容 | 公式ヘルプでの扱い |
|---|---|---|
| アプリ名 | 同意画面に出す名前 | Google の商標と紛らわしい名前は不可 |
| ユーザーサポートメール | 利用者からの問い合わせ先 | 自分のアドレスか自分が管理するグループ |
| アプリのホームページ | アプリを説明するページ | 外部向けの本番アプリでは必須 |
| プライバシーポリシー | データの扱いを書いたページ | 外部向けの本番アプリでは必須 |
| 利用規約 | アプリの規約ページ | 任意 |
| 承認済みドメイン | 上のURLのドメイン | URLを入れる前に登録する |
| デベロッパーの連絡先 | Google からの通知先 | 最新に保つよう案内あり |
| ロゴ | 同意画面のアイコン | 本番では審査後に表示 |
ロゴは任意です。ただ、本番の外部向けアプリでロゴを上げると審査が必要になります。個人ツールなら、空けておくほうが手間は少ないと思います。
ホームページとポリシーに何を使うか
僕は、ホームページとプライバシーポリシーに自分のブログのページを使いました。承認済みドメインには otokuken.com を追加しています。
公式ヘルプには、審査を受けるときの要件も書かれています。ホームページは自分が所有する確認済みドメインに置くこと。プライバシーポリシーはホームページと同じドメインに置き、ホームページからリンクすること。ポリシーには Google のユーザーデータの扱いを書くこと、などです。
審査を受けないなら、ここまで厳密でなくても公開はできるかもしれません。ただ、あとで審査が必要になる可能性もあります。最初から要件に寄せておくと安心ですね。
スコープによっては審査が要る
本番環境に公開しても、すべてが自由になるわけではありません。鍵になるのはスコープの区分です。
| スコープの区分 | 審査 | 審査前の動き |
|---|---|---|
| 非センシティブ | 不要(名前とロゴを出すならブランド審査) | 警告なしで同意できる |
| センシティブ | 必要 | 未確認アプリの警告が出る |
| 制限付き | 必要。加えて年1回のセキュリティ評価 | 未確認アプリの警告が出る |
区分は、Cloud コンソールでスコープを追加したときに自動で表示されます。自分のアプリがどれに当たるかは、そこで確かめられます。
一方で、個人利用のアプリには例外があります。公式ヘルプでは、利用者が100人未満の個人用アプリは審査なしで使い続けられるとされています。その場合、利用者はログイン時に未確認アプリの警告を押して進む形です。
未確認アプリの警告とユーザー上限
審査前にセンシティブなスコープを求めると、同意画面の前に警告が出ます。「このアプリは Google で確認されていません」という趣旨の画面です。
もう一つ、ユーザー数の上限もあります。未確認アプリの画面を出すアプリは、新規ユーザーが合計100人までです。この上限はプロジェクトの全期間に適用され、リセットできないと書かれています。
自分だけで使うツールなら、この上限が問題になることはまずないかもしれません。ただ、家族や知人にも使ってもらうなら人数は意識しておきたいところです。
定期的に切れるものや更新が要るものを棚卸しするなら、毎月の通信費も一緒に見直すのはいかがでしょうか。固定費全体が少し軽くなるかもしれません。
7日以外にトークンが切れる条件
本番環境にしても、リフレッシュトークンは永久ではありません。公式ドキュメントにある失効の条件をまとめます。
| 条件 | 内容 |
|---|---|
| 利用者がアクセスを取り消した | Google アカウント側でアプリの接続を外した場合 |
| 6か月使っていない | リフレッシュトークンを6か月使わなかった場合 |
| パスワードを変えた | Gmail のスコープを含むトークンの場合 |
| トークン数の上限 | 1アカウント・1クライアントIDあたり100個まで |
| 時間制限つきの許可 | 期間を区切って許可し、その期間が過ぎた場合 |
| 管理者の制限 | Workspace 管理者がサービスを制限した場合 |
| セッション制御 | Google Cloud の組織でセッションの長さが決められている場合 |
特に気をつけたいのは、トークン数の上限です。上限に達すると、一番古いトークンが警告なしに無効になります。試しに何度も同意し直すと、本番で使っていたトークンが消えることもありそうです。
全体の上限もあり、公式では許可するクライアントを1アカウント15〜20程度に抑える回避策が紹介されています。
トークンを取り直す
本番環境に公開したら、次はトークンの取り直しです。テスト中に受けた同意は、同意から7日で切れると公式に書かれています。なので公開後に、本人がもう一度同意する操作が必要になります。
僕の場合も、取り直しはこれからです。ツールの認証フローを動かして、ブラウザで同意し直す予定です。
取り直したら、古いトークンは使わないようにしておくとよさそうです。新しいほうを保存先に書き換えて、古いほうは消す。保管場所が複数あると、どれが生きているかわからなくなるかもしれません。
よくある失敗・落とし穴
ここまでの話を、ありがちな失敗としてまとめておきます。
| 失敗 | 起きること | 防ぎ方 |
|---|---|---|
| 別のプロジェクトで作業する | 設定が反映されない | 作業前にプロジェクト名を見る |
| URLを入れずに公開しようとする | 公開ボタンが押せない | ホームページとポリシーを先に用意 |
| 承認済みドメインを後回しにする | URLの登録で止まる | ドメインを先に追加する |
| 公開しただけで安心する | 古いトークンが7日で切れる | 公開後に同意を取り直す |
| 何度も同意し直す | 古いトークンが警告なしに無効化 | 取り直しは必要なときだけ |
| 半年動かさない | トークンが失効する | 定期的に動く仕組みにする |
個人ツールは、止まっても誰も教えてくれません。なので、失効したときにエラーで気づける作りにしておくのも大事だと思います。
無料枠の上限で止まる話は、Cloudflare Workers無料枠のCron Triggers上限に当たったときの逃げ方にもまとめています。個人の自動化は、こういう「静かに止まる」ところが一番の弱点かもしれません。
始める前に確認すること
- コンソールで開いているのが目的のプロジェクトか
- ユーザータイプが外部か内部か
- いまの公開ステータスがテスト中か本番環境か
- 使っているスコープが非センシティブ・センシティブ・制限付きのどれか
- ホームページとプライバシーポリシーのURLを用意できるか
- そのURLのドメインを承認済みドメインに追加したか
- デベロッパーの連絡先メールが最新か
- 公開後に同意を取り直す時間を取れるか
テスト中に受けた同意は、同意から7日で切れると公式にあります。本番環境に公開しても延びないと考えておくのが安全です。公開後は、同意し直してトークンを取り直してください。
自動化の全体像は朝の身支度中に、AIに1枚の『今日のブリーフィング』を作らせている話にも書いています。こうした仕組みも、裏ではトークンに支えられているんですよね。
よくある質問
Q. テスト中のままだと、どのくらいでトークンが切れますか?
外部ユーザー向けでテスト中のプロジェクトでは、7日で失効します。同意した時点から数えて7日です。名前・メール・プロフィールだけのスコープなら、この期限はかかりません。
Q. 個人で使うだけでも本番環境に公開してよいですか?
公開できます。公式ヘルプでも、利用者が100人未満の個人用アプリは審査なしで使い続けられるとされています。ただ、センシティブなスコープでは未確認アプリの警告が出ます。
Q. 公開ボタンが押せないのはなぜですか?
ブランディングの必須項目が欠けている可能性があります。外部向けの本番アプリには、ホームページとプライバシーポリシーのURLが必要です。承認済みドメインの登録も確かめてください。
Q. 公開すれば今のトークンもそのまま使えますか?
テスト中に受けた同意は、同意から7日で失効すると公式にあります。なので、公開後に同意し直してトークンを取り直すのが確実です。取り直しには本人の操作が必要です。
Q. 審査は必ず受けないといけませんか?
センシティブや制限付きのスコープを一般に向けて使うなら、審査が必要です。個人用で100人未満なら、審査なしで使い続けられる例外があります。制限付きのスコープは、年1回のセキュリティ評価も求められます。
Q. テストユーザーは何人まで登録できますか?
テスト中のプロジェクトでは、テストユーザーは100人までです。一度追加すると、その人数分の枠を使う扱いになります。
Q. 本番環境ならトークンはずっと使えますか?
ずっとではありません。6か月使わなかったときや、利用者がアクセスを取り消したときに失効します。1アカウント・1クライアントIDあたり100個の上限もあります。
Q. ロゴやアプリ名は同意画面に表示されますか?
アプリ名やロゴの表示には、審査が必要と公式ヘルプにあります。審査前は、アプリのドメインが表示される形です。個人ツールなら、ロゴを上げないほうが手間は少ないかもしれません。
参考にした公式情報
- Google API へのアクセスに OAuth 2.0 を使用する(Google for Developers)
- Manage App Audience(Google Cloud ヘルプ)
- Manage OAuth App Branding(Google Cloud ヘルプ)
- Get started with the Google Auth Platform(Google Cloud ヘルプ)
- OAuth App Verification Help Center(Google Cloud ヘルプ)
- Verification requirements(Google Cloud ヘルプ)
- When is verification not needed(Google Cloud ヘルプ)
- Unverified apps(Google Cloud ヘルプ)
- Google API の OAuth 2.0 スコープ(Google for Developers)
- Google API サービスのユーザーデータに関するポリシー
まとめ
リフレッシュトークンが7日で切れる原因は、公開ステータスの「テスト中」でした。個人ツールでも、本番環境に公開すればこの期限は外れます。
必要だったのは、ホームページとプライバシーポリシーのURLでした。あとは承認済みドメインの登録ですね。あとはプロジェクトの取り違えに気をつけること。僕はここから、トークンの取り直しに進みます。
自動で動いている仕組みがあるなら、一度ステータスだけでも見てみてください。
本記事にはアフィリエイト広告を含みます。当サイトのリンクを経由して商品・サービスへお申し込みいただいた場合、提携先企業から成果報酬を受け取ることがあります。 また、運営者は楽天グループに所属する社員であり、紹介プログラムを通じた報酬を受け取る場合があります。記事内容・評価は広告の有無にかかわらず、運営者の実体験と調査に基づき作成していますが、 上記の関係性をご理解のうえお読みください。詳しくは免責事項・アフィリエイト表記をご覧ください。
楽天モバイルの通信エリア・電波状況について気になることがある方は、公式の電波改善・調査依頼フォームからご相談いただけます。