ひとことで言うと
公開トークン(Public Token)とは、サービスがクライアントサイド(ブラウザ)での利用を前提として発行するAPIキーの一種です。セキュリティ設計として「このトークンはHTMLに埋め込んでよい」という位置づけで、読み取り専用の操作や特定ドメインからのリクエストのみを許可する制限が付与されています。
Stripe.jsの公開可能キー(pk-live_...)やGoogle Maps JavaScript APIキー(特定ドメインに制限されたもの)が代表例です。これらはブラウザのDevToolsで誰でも確認できる状態になりますが、サービス側の制限によって悪用できる範囲が限定されます。一方、Stripeの秘密キー(sk-live_...)はサーバー側にのみ置くべき非公開キーです。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
HTML共有で関係する場面
AIがGoogle Maps埋め込みコードを生成する際、APIキーをHTMLに直接含むscriptタグを出力します。このキーが特定ドメインに制限されていれば、そのHTMLを別のドメインで共有してもAPIの悪用はできません。しかしドメイン制限なしで発行された場合は、HTMLを見た第三者が同じキーで無制限にAPIを呼べる状態になります。
Mapboxのpublicトークンやamplitudeの分析用APIキーなど、使用量に上限がないサービスのトークンが無制限に公開されると、知らない間に上限を超えて課金が発生します。共有するHTMLに外部サービスのキーが含まれる場合は、必ずそのキーの「使用できる操作範囲」と「ドメイン制限の有無」を確認してください。
よくある誤解
「公開トークンは安全だから管理しなくてよい」という誤解があります。公開トークンは秘密鍵よりリスクは低いですが、適切なドメイン制限が設定されていない公開トークンは第三者が使いまわせます。特に使用量が課金に直結するサービスのトークンは、ドメイン制限・使用量上限・期限を必ず設定したうえで発行してください。
「ai-keyとpublic-keyは同じものだ」という混同もあります。AIツールのAPIキー(例:OpenAI sk-...)は公開トークンではなく秘密鍵であり、HTMLには絶対に含めてはいけません。名前に「public」「pk_」「publishable」が含まれるキーのみが公開可能で、それ以外はサーバー側に隔離してください。
安全に使うための注意点
公開トークンを発行する際は、必ず「許可するリファラードメイン」または「許可するIPアドレス」を設定してください。たとえばGoogle Cloud ConsoleでMaps APIキーを発行するときは「Application restrictions」でHTTPリファラを指定し、共有サービスのドメインだけを許可します。これにより他ドメインからの使用を遮断できます。
公開トークンであっても、使用量のモニタリングは必須です。多くのサービスで「使用量が閾値を超えたらメール通知」を設定できます。この通知を有効にしておくことで、意図しない大量利用を早期に発見し、必要に応じてトークンを再発行して旧トークンを無効化する対応が取れます。
よくある質問
Stripeの公開可能キーがHTMLに含まれていても問題ないですか?
Stripeの公開可能キー(pk-live_...)はフロントエンドに置くことを前提として設計されており、決済フォームの表示にのみ使われます。秘密キー(sk-live_...)はサーバー側だけに保管し、絶対にHTMLには含めないようにしてください。
共有したHTMLに公開トークンが含まれているか確認するにはどうすればよいですか?
HTMLをテキストエディタで開き、「key」「token」「apikey」などをキーワード検索してください。見つかった文字列が「pk_」「publishable」「public」から始まるかどうか、また発行サービスのドキュメントでそれが公開可能なキーか確認します。
ドメイン制限を設定した公開トークンは、別のドメインの共有サービスに移したら使えなくなりますか?
その通りです。制限したドメイン以外からのリクエストはブロックされます。共有サービスのドメインを許可ドメインとして追加するか、一時的にドメイン制限を変更する必要があります。変更後は元のドメイン設定に戻すことを忘れずに。