検証可能な親の同意(VPC)
このガイドでは、わずか数ステップでVPCウィジェットを実装する方法を説明し、子供とその親の両方にスムーズなユーザーエクスペリエンスを提供しながら、迅速に規制要件を満たすことができます。
k-ID Dev Explorer(オープンソースの開発者サンドボックス)を使用して、VPCフローをテストし、イベントログですべてのトラフィックを表示できます。独自のVPC実装の出発点としても使用できます。
エンドツーエンドウィジェットは、単一のインターフェースで完全なコンプライアンスフローを処理する包括的なソリューションで、年齢ゲート、VPC、データ通知、権限、設定を1つのシームレスなエクスペリエンスでカバーします。このウィジェットは、子供のデバイスまたは親自身のデバイスで親が使用でき、同意プロセスに最大の柔軟性を提供します。
年齢ゲートとは?
年齢ゲートは、年齢制限のあるコンテンツ、機能、またはサービスへのアクセスを許可する前に、ユーザーの年齢を収集および確認するために使用されるメカニズムです。年齢ゲートは、多くの管轄区域の規制で、未成年者のデジタルコンテンツアクセスを管理する法律へのコンプライアンスを確保するために必要です。
年齢ゲートには、いくつかの重要な目的があります:
- 規制コンプライアンス: 異なる管轄区域での確認に関する法的要件を満たす
- コンテンツ保護: 未成年者が不適切なコンテンツにアクセスするのを防ぐ
- データプライバシー: COPPA、GDPR-Kなどの規制に従って、子供のデータを適切に処理する
- 親の管理: 親が子供のデジタルアクセスについて情報に基づいた決定を行えるようにする
ユーザーの管轄区域を提供することで、エンドツーエンドウィジェットは、年齢を収集するための最適な方法を自動的に決定し(まだ提供されていない場合)、その管轄区域の特定の規制に基づいてVPCが必要かどうかをインテリジェントに決定します。これにより、複雑な管轄区域ロジックを実装する必要なく、コンプライアンスが確保されます。
検証可能な親の同意(VPC)とは?
検証可能な親の同意(VPC)は、親または信頼できる大人が子供のデジタルコンテンツ、サービス、または機能へのアクセスについて情報に基づいた同意を提供できることを保証する規制要件です。子供が年齢制限のあるコンテンツにアクセスしようとすると、システムはアクセスが許可される前に親の承認を必要とするチャレンジを作成します。
VPCフローには通常、以下が含まれます:
- 年齢収集: 適切な方法で子供の年齢を決定する
- チャレンジ作成: 親の承認が必要な場合に同意チャレンジを作成する
- 親への通知: さまざまなチャネル(メール、QRコード)を通じて親に通知する
- 同意処理: 親がリクエストを確認し、承認/拒否する
- セッション管理: 同意結果に基づいて子供の権限を作成または更新する
前提条件
開始する前に、以下が必要です:
- k-ID製品: k-ID Compliance Studioで製品を作成して設定する
- APIキー: Compliance Studioの製品の開発者設定ページからAPIキーを生成する
- Webhookエンドポイント(オプションですが推奨): チャレンジとセッションイベントを受信するための安全なHTTPSエンドポイントを設定する。詳細については、Webhooksを参照してください。
ステップ1: VPCフローを開始する
/widget/generate-e2e-url APIを呼び出して、完全なVPCフローを処理するエンドツーエンドウィジェットURLを作成します。これにより、ユーザーが年齢収集と親の同意プロセスを完了するための一意のURLが返されます。
APIリファレンスをAPIキーと一緒に使用して、VPCウィジェットURLをすばやく生成できます。
実装では、APIキーがクライアント側のコードで公開されないように、これはサーバー間呼び出しである必要があります。
リクエストの例
POST /api/v1/widget/generate-e2e-url
Content-Type: application/json
Authorization: Bearer your-api-key
{
"jurisdiction": "US-CA"
}
設定フラグ
オプションのflagsパラメータを使用すると、スキップするフローの部分をカスタマイズできます:
skipDataNotices: データ通知と同意収集をスキップskipVerification: 確認ステップをスキップskipPermissions: 権限管理をスキップskipPreferences: 設定をスキップ
レスポンスの例
{
"id": "7854909b-9124-4bed-9282-24b44c4a3c97",
"url": "https://family.k-id.com/widget?token=eyJhbGciOiJFUzM4NCIs..."
}
ステップ2: VPCウィジェットを表示する
返されたURLを使用して、Webサイトまたはアプリにiframeを作成します。ユーザーはこのインターフェースを通じて年齢収集と信頼できる大人の同意プロセスを完了し、利用可能な方法が管轄区域の要件に自動的に適応します。

HTML実装
<div id="vpc-container">
<iframe
id="vpc-widget"
src="WIDGET_URL"
width="100%"
height="600"
frameborder="0"
allow="camera;payment;publickey-credentials-get;publickey-credentials-create">
</iframe>
</div>
iframeは、ユーザーに次のような複数の確認方法を提示します:
- AgeKey: 初期確認プロセス後に生成される再利用可能で匿名の年齢証明。
- 顔年齢推定: デバイスのカメラを使用したプライバシー保護型の年齢推定
- ID文書確認: 政府発行のID確認
利用可能な特定の方法は、管轄区域とCompliance Studioでの製品設定によって異なります。詳細については、確認方法を参照してください
ウィジェットは、ユーザーに以下を提示します:
- 年齢収集: 管轄区域に適した年齢収集方法
- データ通知: Compliance Studioでの製品設定に応じて受け入れるデータ通知
- 権限: Compliance Studioでの製品設定に応じて管理する権限
- 親の同意チャレンジ: ユーザーが未成年者と判断された場合、信頼できる大人の承認のためにチャレンジが作成されます
特定のフローは、管轄区域とCompliance Studioでの製品設定によって異なります。
ステップ3: チャレンジとセッションイベントを処理する
親の同意のためにチャレンジが作成された場合、結果を処理する必要があります。実装では、クライアント側とサーバー側の方法を組み合わせて使用する必要があります:クライアント側のイベントはUI要素を制御するのに最適ですが、データの整合性については、実際の結果はwebhookまたは/challenge/get-statusへの呼び出しから取得する必要があります。
クライアント側(DOMイベント)
チャレンジが作成または解決されたときに応答性の高いUI更新にDOMイベントを使用します。イベント構造の詳細については、Widget.AgeGate.Challengeを参照してください。
const handleMessage = (event) => {
const message = event.data;
if (message.eventType === "Widget.AgeGate.Challenge") {
if (message.data.status === "PASS") {
// 親が同意を承認 - UIを即座に更新
console.log("Consent approved:", message.data.sessionId);
updateUI(message.data.sessionId);
} else if (message.data.status === "FAIL") {
// 親が同意を拒否 - UIを即座に更新
console.log("Consent denied");
updateUI();
}
}
};
window.addEventListener("message", handleMessage);
サーバー側(webhooks、API呼び出し)
データの整合性と信頼性の高い状態管理にwebhooksまたはAPI呼び出しを使用します。データの整合性については、DOMイベントのみに依存するのではなく、webhooksからのイベントまたは/challenge/get-statusへの呼び出しで結果を常に確認してください。
Webhooks
webhookイベント構造の詳細については、Challenge.StateChangeとSession.ChangePermissionsを参照してください。
webhookエンドポイントを設定して、Challenge.StateChangeとSession.ChangePermissionsイベントを受信します:
Challenge.StateChangeイベント:
{
"eventType": "Challenge.StateChange",
"data": {
"id": "683409f1-2930-4132-89ad-827462eed9af",
"productId": 42,
"status": "PASS",
"sessionId": "0ad1641f-c154-4c2-8bb2-74dbd0de7723",
"approverEmail": "parent@example.com",
"kuid": "123456"
}
}
Session.ChangePermissionsイベント:
{
"eventType": "Session.ChangePermissions",
"data": {
"id": "78c299b2-5c33-4bde-84fe-8fc950fc7a96",
"productId": 42
}
}
API呼び出し
チャレンジIDで/challenge/get-statusを使用してチャレンジステータスをクエリします:
GET /api/v1/challenge/get-status?id=683409f1-2930-4132-89ad-827462eed9af
Response:
{
"id": "683409f1-2930-4132-89ad-827462eed9af",
"status": "PASS",
"sessionId": "0ad1641f-c154-4c2-8bb2-74dbd0de7723"
}
Webhook設定
VPCウィジェットの場合、webhookエンドポイントが以下を受信するように設定されていることを確認してください:
Challenge.StateChange: 親の同意が承認または拒否されたときに通知Session.ChangePermissions: 親によってセッション権限が変更されたときに通知
これらのイベントは、適切なアクセス制御を維持し、親の同意要件へのコンプライアンスを確保するために不可欠です。
次のステップ
VPCウィジェットを実装したので、これらのリソースを探索して統合を強化してください:
- APIリファレンスドキュメント: すべてのウィジェットとチャレンジAPIの詳細なドキュメント
- Webhooks設定: 本番システム用の堅牢なwebhook処理を実装
- ベストプラクティス: セキュリティと信頼性の高いユーザーエクスペリエンスを確保するためのベストプラクティスを実装
- ローンチ前チェックリスト: 公開前に要件を確認
k-IDのVPCウィジェットを使用すると、家族にスムーズでプライバシー重視のエクスペリエンスを提供しながら、親の同意規制へのコンプライアンスを迅速に実現できます。