ARTICLE
Chrome拡張からライセンスを検証する流れ
有料Chrome拡張のライセンス検証は、単に「キーが合っているか」を見るだけではありません。 ユーザーが購入した権利を拡張内の機能へ反映し、返金や解約、端末変更、ネットワークエラーにも耐える設計が必要です。
基本の流れは次のようになります。
- ユーザーがPolar.shで購入する。
- ユーザーがライセンスキー、または購入後の権利情報を受け取る。
- 拡張のOptions pageでライセンスキーを入力する。
- 拡張がCloudflare Workerの検証APIへキーを送る。
- WorkerがPolar.shまたは自前DBを確認し、有効な権利かを判断する。
- 拡張が検証結果を
chrome.storageにキャッシュする。 - 有料機能を使うときにキャッシュを参照し、必要に応じて再検証する。
重要なのは、拡張から直接Polar.shの管理APIへアクセスしないことです。 管理用トークンを拡張に入れると、ユーザーへ配布されるパッケージの中に秘密情報を入れることになります。 ライセンス検証APIはCloudflare Workerなどのサーバー側に置き、拡張はそのAPIへ最小限の情報だけを送ります。
検証APIのレスポンスは、UIで使いやすい形にします。
たとえば、active、planName、expiresAt、features、checkedAt、reason のような情報を返すと、PopupやOptions pageで状態を表示しやすくなります。
ただし、サーバー側の内部IDや不要な個人情報を返す必要はありません。
ネットワークエラー時の扱いも決めておきます。 最後の検証が最近成功しているなら、短い猶予期間だけ有料機能を使えるようにする設計もあります。 一方で、長期間再検証できない場合は、読み取り専用にする、再ログインを促す、サポート導線を出すなどの処理が必要です。 この挙動はユーザー体験と不正対策のバランスで決めます。
端末制限を導入する場合は、activationの概念が必要になります。 初回検証時に端末ラベルやactivation idを発行し、次回以降はそのactivation idと一緒に検証します。 ユーザーが端末を買い替えたときに古いactivationを解除できる導線も必要です。
有料機能の分岐は、UIだけで隠すのでは不十分です。 拡張内で高価な処理や外部API利用がある場合は、サーバー側APIでも権利を確認します。 UIはユーザー体験のため、サーバー側判定は課金保護のため、と役割を分けます。
ライセンス検証は、一度作ったら終わりではありません。 Productの変更、価格変更、プラン追加、返金ポリシー変更に合わせて、検証レスポンスや拡張内の表示も更新できるようにしておくと、後から拡張を育てやすくなります。
References
- Chrome Extensions Get started: https://developer.chrome.com/docs/extensions/get-started/
- Chrome Extensions Declare permissions: https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions
- Chrome Extensions Storage API: https://developer.chrome.com/docs/extensions/reference/api/storage
- Chrome Web Store Program Policies: https://developer.chrome.com/docs/webstore/program-policies/policies
- Chrome Web Store User Data FAQ: https://developer.chrome.com/docs/webstore/program-policies/user-data-faq
- Polar Documentation: https://docs.polar.sh/
- Polar Webhook Endpoints: https://polar.sh/docs/integrate/webhooks/endpoints
- Polar Automated Benefits: https://docs.polar.sh/features/benefits/introduction