GoogleAPIの制限付きスコープのOAuth検証の体験談
はじめに
Google API のうち機密性の高いスコープ、制限付きスコープに分類される API を使用する場合は、OAuth 検証(OAuth Verification)という Google による検証を受けないといけません。
If your app uses Google APIs to access Google users’ data, you might have to complete a verification process before you publish your app.
最も審査が厳しい制限付きスコープの OAuth 検証という地獄を経験したので、その体験談を記事に残せればと思っています。
対象読者
- これから GoogleAPI を使用予定で OAuth 検証を控えている方
- 特に制限付きスコープの OAuth 検証にかかる時間などを把握したい方
OAuth 検証の完了までの流れ
ブランド検証
アプリのロゴ、表示名、プライバシーポリシーの URL など、OAuth 同意画面に表示される基本情報の登録が必要です。
対応が必要なケース
- GoogleAPI を使用するすべてのアプリ
所要期間
2 ~ 3 営業日
GoogleAPI のユーザーデータポリシーへの準拠
GoogleAPI のユーザーデータポリシーに準拠しているかの検証を受ける必要があります。
対応が必要なケース
- 機密性の高いスコープに該当する API を使用する場合
- 制限付きスコープに該当する API を使用する場合
所要期間
約 10 日
特定のスコープを使用する場合の追加要件の対応
特定のスコープに該当する API を使用する場合は、Google が定めた追加要件を満たす必要があります。
所要期間
?
対応が必要なケース
- 特定の制限付きスコープに該当する API を使用する場合
セキュリティ評価
Google とはまた別の機関に、セキュリティの脆弱性がないかどうかを評価してもらう必要があります。
対応が必要なケース
- 制限付きスコープに該当する API を使用する場合
所要期間
数週間
OAuth 検証に伴い必要なこと一覧
具体的な手順は他の参考記事が存在するので、そちらにお任せします。
デモ動画やレビューでの指摘事項を含めて、審査に提出前に確認していた要件一覧
区分 | チェック項目 |
---|---|
デモ動画 | OAuth 同意画面は英語である必要がある |
デモ動画 | OAuth 同意画面にはアプリ名が表示されている |
デモ動画 | 動画内のテロップにて clientId を表示しているか |
デモ動画 | リクエストするスコープ毎の説明を Learn More ボタンを押して表示させているか |
デモ動画 | (モバイルなので、)OAuth 同意画面に URL 表記がないことを動画内で説明できているか |
デモ動画 | OAuth を起動するための Google サインインボタンなど、ユーザーが OAuth を許可するまでの流れが入っている |
デモ動画 | OAuth 同意画面に要求しているスコープおよび制限された範囲ごとに機能を示すことで、データがどのように使用されているかを示している |
デモ動画 | 利用するスコープのデータをユーザーがどのようにアクセスするかが動画になっている |
デモ動画 | API 使用部分でどの API を使っているかの説明テロップが入っているか |
デモ動画 | Youtube の動画は一般公開になっているか |
指摘事項 | GoogleFit との連携ボタンに GoogleFit のロゴが入っているか |
指摘事項 | プライバシーポリシーに Google API のユーザーデータポリシーのリンクが貼ってあるか |
指摘事項 | Google API のユーザーデータポリシーに準拠している文章の位置をメールにて説明しているか |
指摘事項 | メールの返信に更新したプライバシーポリシーの URL を添付しているか |
指摘事項 | レビューチームのテスト用アカウント oauthtest121@gmail.com でログインできるようになっているか |
指摘事項 | メールの返信に動作確認できる APK ファイルが添付してあるか |
指摘事項 | GoogleFit との連携ボタンの文言が「Google Fit に接続」に変更されているか |
指摘事項 | oauthtest121@gmail.comのテストアカウント用に確認用のヘルスケアデータが入っているか |
OAuth 検証にかかる時間
僕が携わっていたプロジェクトでは以下の 7 つの制限付きスコープに該当する API を使用する必要がありました。
https://www.googleapis.com/auth/fitness.activity.read
https://www.googleapis.com/auth/fitness.blood_glucose.read
https://www.googleapis.com/auth/fitness.blood_pressure.read
https://www.googleapis.com/auth/fitness.body_temperature.read
https://www.googleapis.com/auth/fitness.heart_rate.read
https://www.googleapis.com/auth/fitness.oxygen_saturation.read
https://www.googleapis.com/auth/fitness.sleep.read
制限付きスコープの OAuth 検証かかる時間は Google の公式の見解では、4 ~ 6 週間かかるとされていました。
リリースまでの開発期間に余裕が無い中ではありましたが、バッファを見てリリースの 2 ヶ月前には申請を開始しないといけないと考えていました。
しかし、、!!
実際に審査にかかった時間は約 3 ヶ月ほどとなってしまいました。。
- ブランド検証 => 3 日ほど
- GoogleAPI のユーザーデータポリシーへの準拠 => 2023 年 4 月 20 ~ 2023 年 7 月 3 日までの約 10 週間
- セキュリティ評価 => 2023 年 7 月 3 日 ~ 2023 年 7 月 15 日までの約 2 週間
なぜ OAuth 検証に 3 ヶ月もかかってしまったのか
基本的に審査のフィードバックや再提出はメールでのやり取りとなるのですが、GoogleAPI のユーザーデータポリシーへの準拠
部分の審査の途中で、審査担当者からの連絡が途絶えてしまいました。
何度もリマインドのメールを送りましたが、返信が返ってくることはありませんでした。
返信が返ってこなくなった時に行ったこと
リマインドメールの送信
返信は一切なく、無意味に終わりました。
サポート窓口の捜索
OAuth 検証のお問い合わせの窓口を探し回った結果、Google Developers という部門が窓口になっているようでした。
fit-developer-support@google.com
こちらのメールアドレスに OAuth 検証がストップしてしまった旨を伝えると、レビューチームに掛け合ってみるとの返信をいただけました。
Hi Maaku,
This is to inform you that we have escalated and filed a ticket for your concern with the review team. We'll provide updates once we heard back from them.
しかし、なかなか解決には繋がりませんでした。
Hi, Maaku Saito-san,
We apologize for the delay in our reply. We have not yet received any feedback from the engineering team regarding the ticket we submitted. As of today, we have requested an update and follow-up regarding your concern.
We will immediately notify you of any updates from the engineering team. We appreciate your understanding and patience in this matter.
OAuth 検証のリセット
以下の手順で OAuth 検証をリセットできました。
- GCP の OAuth 同意画面でのスコープの設定を削除して送信
- GCP の OAuth 同意画面でのスコープの設定を再度設定し直して送信
審査毎に担当者がつくのですが、審査をリセットすることで音信不通になった担当者とは別の担当者がついてくれました。
審査は 1 からになったのですが、もうその他の手段がありませんでした。。
OAuth 検証での具体的な指摘内容
プライバシーポリシーの URL について
OAuth 同意画面に設定したプライバシーポリシーの URL とホームページからプライバシーポリシーに遷移した際の URL が異なるとの指摘を受けました。
The Privacy policy link submitted for review is different from the Privacy policy link redirecting from the homepage. Kindly update the privacy policy URL and make sure that both the links must match each other.
以下のように GA4 のクロスドメイン設定をしていた関係で、ホームページからの遷移の際に動的なパラメータがついていることが原因でした。
- https://privacy_url
- https://privacy_url&prams=hogehoge
APK ファイルの送付
アプリの動作確認するための APK ファイルをメールに添付してくれとの指示を受けました。
こちらの検証用のメールアドレス(oauthtest121@gmail.com
)で APK ファイルにアクセスできるようにとのことでした。
以下 3 つの方法で共有を試みましたが、謎に APK ファイルにアクセスできませんという 1 点張りを受けました。。
- Google Drive 経由
- 公開バケット経由
- GooglePlay の内部テスト経由
最終的には Google Drive 経由で APK ファイルを審査担当者に渡すことに成功しましたが、なぜ最初の段階でアクセスできないと言われたのかは本当に謎でした。。(アクセス権の設定もちゃんとしていたので。。)
そもそも GooglePlay の内部テスト経由でアクセスできないというのも謎ではありますが、この部分は審査員ガチャなのかもしれませんね。
テストアカウントの作成
アプリにoauthtest121@gmail.com
でログインできるようにテストアカウントを作成する必要がありました。
また、「デモ動画と同じようなヘルスケアデータのグラフが見れない!」との指摘も受けたので、テスト用のデータを準備しておいてから審査依頼を出していました。
Google API のユーザーデータのポリシーに準拠するという開示文章をプライバシーポリシーに追加
以下のような例文が送られてきていたので、日本語に訳してプライバシーポリシーに 1 文追加するだけで OK!だったはずなのですが、、
この部分だけでメールのやり取りが 5 往復くらい発生しました。
リンクを貼る URL が違う
Google API Services User Data Policy
の部分に貼る URL が違うと指摘を受けました。
しかし、こちら側はメールの例文に貼られていたリンクをそのまま貼っただけなのですが。。
審査員によって異なるかもしれませんが、メールの例文に貼られていた URL が間違っている説が考えられます。
これはトラップでしかないです。
最終的に以下の URL へのリンクを貼ったら通過しました。
例文と違うぞ!
送られてきた例文を日本語訳して、プライバシーポリシーに追加しましたが、ニュアンスが違う!という指摘を 4 回くらい受けました。
こちらとしては
- 送られてきた文章を DeepL に翻訳してもらう
- 日本語に違和感がないか確認し、文章を確定
ということをしただけなので、意味がわかりませんでした。
そしたら担当者はこんなことを言い出すではありませんか。。
" {App Name} from the Google APIs is governed by the User Data Policy for Google API Services , including its restricted use requirements ".
ん?こんな文章にしていないぞ..
そして文章を微調整して送り直したら、、
The updated disclosure is still not meeting our requirements. The disclosure updated by you is as follows:
" In addition, the use and transfer of information received by the {Service Name}. {App Name} from the Google APIs to any other app complies with the User Data Policy of the Google API Services, including its limited use requirements ".
ん?... ちょっと意味がわからない。。
という状態になりました。
担当者からスクリーンショットを送ってもらうことで判明したことは、審査担当者がGoogle Chrome の Google 翻訳の拡張機能を使って、プライバシーポリシーの画面を英語に翻訳して確認をしていた ということでした。
僕たちは Google 翻訳で英文に直された時に、Google 側が提示してきた例文に近い文章になるように日本語を調整する必要がありました。
1 週間以上の不毛な時間が流れました。。
ユーザーのデータをどのようなサードパーティーツールと共有するのかをプライバシーポリシーに記載
Google のユーザーデータポリシーへの準拠の部分への対応が終わったら、以下のような追加要件を提示されました。
Clearly describes what data your app shares with third-party tools ( such as AI models) in the app’s privacy policy.
メールの文章によると、自社のデータベースにて管理する場合もプライバシーポリシーへの記載が必要なようでした。
ユーザーのデータをサードパーティーツールと共有することに対して同意を獲る必要がある
もう一つの追加要件は以下でした。
Clearly demonstrates how your app acquires explicit user consent to share data with third-party tools (such as AI models).
こちらは GoogleFit と連携する前の画面に、同意のチェックボックスを用意することで解決しました。
We observed that the additional disclosures which we had mentioned previously are not yet added to your app.
「このように要件を満たせていないぞ?」という連絡が来たのですが、「具体的にどのような対応が必要なのかを明示してくれ」という返信をしたら指摘がなくなりました。
審査員が見落としていただけの可能性がありますね。
セキュリティ評価
Google 側の地獄の OAuth 検証フローが終わると、Security Assessment
を受けてくれとの連絡がありました。
この連絡の中で、
- Tier1 ~ 3 の通達
- セキュリティ評価の期限
が伝えられました。
僕たちのプロジェクトは Tier2 に分類されました。リリース前のアプリであれば基本的に Tier2 に分類される気がします。
また、セキュリティ評価の期限は連絡を受けてから約 3 ヶ月後までに完了させるように指示されました。
CASA(Cloud Application Security Assessment)の概要の URL がメールに添付されていたので、そちらを参考にセキュリティ評価を完了させました。
僕たちは 12 日ほどでセキュリティ評価を終えましたが、本気で対応すれば 1 週間で終わらせることができたなと思っています。
詳しくはこちらの記事でまとめています。
最後に
Google の制限付きスコープの API を使用できるようになるまでの道のりはとても険しいものでした。
制限付きスコープの API の OAuth 検証を完了させたという実録記事のようなものは存在しなかったため、どのくらいの期間を要するのかの見積もりが難しかったです。
アプリのリリースの日程も厳しめであったため、GoogleFit との連携機能を初回リリースに入れることは結局できませんでした。
僕たちの場合は、アプリが大体完成した状態から + 3 ヶ月の猶予がないと無理でしたから。
審査担当者が音信不通になるというトラブルがなければ、2 ヶ月くらいかかるという想定で進めるのが良いと思います。
記事を最後まで読んでくれた皆様が「こんな事例もあったよ」ということ理由に開発期間を + 3 ヶ月確保できることをエンジニアとして祈っております。
Twitter では Flutter を中心とする技術関連の情報を発信しています!
お仕事の依頼は以下のメールアドレスまでご連絡をよろしくお願いします。
mark.saito@jp-gx.com
Discussion