ドキュメント
PoCを5分で保護する
POCXはホスト型のアクセスゲートです。アプリ側に置くのは署名付きセッショントークンを検証する単一ファイルのSDKだけで、本人確認・規約・セッションはPOCXのサーバー上で動作します。
はじめての方は ステップバイステップのチュートリアルから → または よくある質問もご覧ください。
クイックスタート(5分)
PoCを作成する
サインアップ(メールOTP、パスワード不要)して、ダッシュボードでPoCを作成し、評価者のメールアドレスを招待します。ログインコードが届くのは、許可リストに登録されたメールアドレスだけです。3つの環境変数をコピーする
PoCのOverviewページから認証情報をコピーし、アプリのサーバー環境(Next.jsなら
.env.local)に設定します。.env.localPOCX_URL=https://pocx.dev POCX_PROJECT_KEY=pocx_pk_… POCX_SECRET=pocx_sk_… # server-side only — never expose to the browserPOCX_SECRETはサーバー間呼び出しの認証に使う値です。ブラウザにもgitにも決して含めないでください。SDKをダウンロードする
依存関係ゼロのTypeScriptファイル1つで、Nodeとエッジランタイムの両方で動作します。
terminalcurl -o lib/pocx.ts https://pocx.dev/sdk/pocx.tsゲートを組み込む
Next.js 16(App Router)の場合はプロジェクトルートに
proxy.tsを作成します。Next.js 15以前ではファイル名をmiddleware.tsとし、proxyの代わりにmiddlewareをエクスポートしてください。proxy.tsimport { createPocxGate } from "./lib/pocx"; const gate = createPocxGate(); export const proxy = gate.nextProxy(); export const config = { matcher: ["/((?!_next/static|_next/image|favicon.ico).*)"], };デプロイする
これでアプリにアクセスすると、あなたのブランドを反映したゲートhttps://pocx.dev/gate/<slug>へ307リダイレクトされます。OTPログインと規約への同意を終えると、評価者は署名付きセッションを持ってアプリに戻ります。
フローの仕組み
内部では、初回アクセス時に次のシーケンスが実行されます。
リダイレクト
未認証のリクエストがSDKに到達すると、このPoC用のホスト型ゲートへ307リダイレクトされます。ゲートでのOTP
評価者がメールアドレスを入力します。許可リストに登録されていれば、POCXが6桁のコードをメールで送信します(保存時はハッシュ化、単回使用、レート制限付き、5回失敗でロックアウト)。規約への電子署名
現行のTerms of Access(アクセス規約)が表示され、評価者が電子署名します。POCXはタイムスタンプ、IPアドレス、ユーザーエージェント、表示された規約本文そのもののSHA-256ハッシュを記録し、署名済みPDF証明書をメールで送付します。単回使用グラント
POCXは、2分で失効する単回使用のグラントを付けて、アプリのコールバックへリダイレクトします。サーバーサイドでの交換
SDKがそのグラントをサーバー間通信(POCX_SECRETで認証)でHS256署名のセッショントークンと交換します。自分のドメインへのCookie
セッショントークンは、アプリ自身のドメイン上のCookieとして設定されます。これ以降、POCXはリクエスト経路から外れます。ローカルでの検証
すべてのリクエストはトークン署名に対してローカルで検証され、さらに60秒ごとにPOCXに対して再検証されます。これにより、セッションの失効、PoCの一時停止、規約バージョンの更新が反映されます。
Express / 任意のNodeアプリ
同じSDKファイルにExpressスタイルのミドルウェアが同梱されています。ルートより前にマウントしてください。
import express from "express";
import { createPocxGate } from "./lib/pocx";
const app = express();
const gate = createPocxGate();
app.use(gate.expressMiddleware());Nodeのミドルウェアチェーンを実行できる環境なら、何でも同じように動作します。ゲートより後ろのすべてのルートが保護されます。
設定リファレンス
環境変数(すべて必須):
| 変数 | 説明 |
|---|---|
| POCX_URL | POCXデプロイメントのオリジン。例: https://pocx.dev |
| POCX_PROJECT_KEY | このPoCの公開プロジェクトキー(pocx_pk_…)。ゲートに対してPoCを識別します。 |
| POCX_SECRET | サーバーシークレット(pocx_sk_…)。交換呼び出しとセッション検証の署名に使用します。サーバーサイド専用です。 |
createPocxGate(options) のオプション:
| オプション | デフォルト | 説明 |
|---|---|---|
| cookieName | "pocx_session" | アプリのドメインに設定されるセッションCookieの名前。 |
| publicPaths | [] | 保護対象から除外するパスのプレフィックス(例: ["/api/health"])。それ以外はすべてゲートで保護されます。 |
| logEvents | false | page_view イベントをProの監査ログにストリーミングします。環境変数 POCX_LOG_EVENTS=true でも設定できます。 |
const gate = createPocxGate({
cookieName: "pocx_session", // default
publicPaths: ["/api/health"], // prefixes left unprotected
logEvents: true, // stream page_view events (Pro)
});規約のカスタマイズ
すべてのPoCには、標準の保護的なTerms of Accessテンプレートが付属します。POCXを使う価値の核心となる、次の条項も含まれています。
「エンゲージメントなき再利用の禁止。あなたまたはあなたの組織が(直接か第三者を通じてかを問わず)、本PoCまたはそこに具現化されたコンセプトに由来する、実質的に基づく、あるいはそれらを組み込んだ製品・サービス・ソリューションを開発、委託または実装する場合、当該業務について {{OWNER_ENTITY}} と誠実に合意される条件のもとで契約を締結することに同意するものとします。」
テンプレートはPoCごとのプレースホルダーを解決します。完全に独自のテキストを指定することもでき、その場合も同じプレースホルダーを使用できます。
- テンプレートモード — 標準の保護的な規約に、あなたの事業体、PoC名、目的が差し込まれます。
- カスタムモード — 独自のテキストをそのまま使用します。プレースホルダーを使えば、同様に解決されます。
- バージョン更新 — 規約のバージョンを上げると、すべての評価者は次のリクエストが通る前に再同意を求められます。
画面に表示される規約、署名済みPDF、保存されるSHA-256ハッシュは、すべて同一の解決済み文字列から生成されるため、3つが一致することが保証されます。
セキュリティモデル
- OTPコードは保存時にハッシュ化され、単回使用・レート制限付きで、5回失敗するとそのメールアドレスはロックアウトされます。
- 評価者のパスワードはどこにも存在しません。漏洩し得るものが何もありません。
- セッションはサーバーサイドで失効可能です。SDKは60秒ごとにPOCXに対して再検証するため、失効、PoCの一時停止、規約バージョンの更新は1分以内に反映されます。
POCX_SECRETがブラウザに到達することはありません。グラントとトークンの交換はサーバー間で行われます。- コールバックのグラントは単回使用で、2分後に失効します。
- ゲートがオープンリダイレクトすることはありません。登録済みの保護対象アプリURLにのみ評価者を戻します。
コーディングエージェント向け
最速の統合方法は、自分で作業しないことです。POCXはエージェントが実行可能な手順を /llms.txt で公開しています。次のプロンプトをClaude Code、Codex、Cursorに貼り付けてください(コーディングエージェントが読むため、プロンプトは英語のままです)。
Add POCX protection to this app. Follow the instructions at https://pocx.dev/llms.txt exactly.
エージェントが手順を読み、単一ファイルのSDKをダウンロードし、ミドルウェアを組み込み、リダイレクトの動作確認まで、エンドツーエンドで行います。