会員基盤「memberkit」を、オープンソース(AGPL-3.0)で公開しました。

〜 ログインできることと、会員であることは違う。その先を全部書きました 〜


2026年9月4日

株式会社NUP WHITE

当社は、会員基盤「memberkit」を OSS(AGPL-3.0)として公開しました。

登録 → メール認証 → 管理者承認 → プラン契約 → 権限付与 → 退会 → 権限停止 という会員ライフサイクル全体を実装済みのアプリケーションです。自己ホストして商用にお使いいただけます。

リポジトリ: https://github.com/nup-cloud/memberkit

公開時点の数字

7実装済みの会員状態(登録 〜 権限停止)
123単体テスト
77E2E テスト(攻撃シナリオ中心)
8管理コンソールの画面数
9MCP ツール
AGPL-3.0ライセンス(商用ライセンスも用意)

背景:Firebase Auth や Auth0 が面倒を見るのは「ログインまで」

認証サービスが引き受けてくれるのは、「本人かどうか」の確認までです。その先、会員として扱ってよいのかどうかは、毎回アプリケーション側で作ることになります。

その先にあるもの中身
承認入会申請の確認・承認。承認待ちの人をどう扱うか
プラン契約・課金・プラン変更・支払い失敗時の扱い
権限ロール・権限の設計と付与、そして取り消し
退会退会・データ削除・保全期間・再入会

この 4 つは、サービスごとに毎回ゼロから書かれ、そのたびに「退会したのに権限が残っていた」「承認前に決済が通った」といった事故が起きています。

memberkit は、この「その先」を全部書いたものです。


会員機能、ここまで入っています

REGISTERED → EMAIL_VERIFICATION_REQUIRED → PENDING_APPROVAL → APPROVED → ACTIVE
                                                  ↓              ↓
                                              REJECTED      PAST_DUE → CANCEL_PENDING → CANCELLED

入場できるのは ACTIVE / CANCEL_PENDING / PAST_DUE の 3 状態だけで、判定はアプリ内の 1 箇所で行い、各画面はその結果に従います。

さらに搭載

内容
管理コンソール 8 画面Dashboard / Members / Approvals / Plans / Billing / API・MCP / Audit log / Security
REST API発行したキーが「どのアプリを操作できるか」まで決まる
MCP サーバー9 つのツールを stdio で提供。AI から会員基盤を操作できる
マルチテナントテナント → アプリケーション → 会員の 3 階層。全クエリがスコープ必須
二段階認証認証アプリ(TOTP / RFC 6238)と SMS から選択。管理者は既定で必須
監査ログすべての管理操作を記録。AI 経由の変更も対象

機能は削っていません。 動いているものが、そのまま入っています。


権限は保存せず、毎回プランから導出する

memberkit は Role は保存しますが、Permission は保存しません。

プランから権限を毎回計算するため、プランが変われば権限も同時に変わります。結果として、「取り消し忘れた古い権限」が残る場所そのものがありません。

契約状態から権限への変換は独立したモジュールに切り出し、全分岐をテストしています。ここが会員基盤の中で最も事故が高くつく場所だからです。

そして、承認待ちの会員は Google ログインに成功していてもアプリケーションには入れません。 アクセスできるかどうかは、認証の成否ではなく会員状態から決まります。


「うまくいく」だけでなく、「突破されない」も検証

件数内容
E2E77Firebase エミュレータ上の実アプリに対する攻撃シナリオ
単体123権限導出・状態遷移・TOTP・暗号・テナント境界・webhook 署名ほか

E2E が確認しているのは「動くこと」より、攻撃者が試すことが失敗することです。

  • 一般会員による管理 API の呼び出し
  • 未承認の状態での決済
  • ログアウト後の Cookie 再利用
  • 他テナントの ID での読み取り・書き込み
  • ヘッダ(X-Forwarded-For)詐称によるレート制限逃れ
  • 二段階認証の通過証明を別セッションへ転用
  • 失効済み API キーの再利用

実装済みの防御(抜粋)

項目内容
セッションhttpOnly Cookie。ID トークンをブラウザに保持しない
認可全ページ・全 API でサーバ側再検証。middleware は認可の境界にしない
決済価格はサーバが解決。クライアントは金額も price ID も送れない
Webhook署名検証 + イベント ID による冪等化。偽造・改竄・リプレイを拒否
テナント分離全クエリがスコープ必須(型で強制)。他テナントの ID は「存在しないもの」として扱う
MFA シークレットAES-256-GCM で封緘して保存。リカバリコードはハッシュのみ
CSPリクエストごとの nonce + strict-dynamic
MCP スコープ個人情報・決済・シークレット系の権限は API / MCP キーに付与できない

会員機能を、最初から作り直さない

SaaS・会員制サービス・社内アプリの会員基盤として、そのままお使いいただけます。

評価は 1 コマンドです。Firebase のプロジェクトも Stripe のアカウントも作らずに、登録からメール認証、管理者承認、プラン契約、二段階認証、管理コンソールまで一通り触れます。

docker compose up --build      # → http://localhost:3000

まずはリポジトリをご覧ください。

https://github.com/nup-cloud/memberkit


導入効果(モデルケース試算)

以下は、会員基盤を自前で実装している一般的な体制を想定した当社による試算です。実在の導入事例の実績値ではなく、成果を保証するものではありません。

開発・運用にかかっていた時間

項目自前実装(想定)memberkit
会員基盤の初期構築8〜12 週評価環境は 1 コマンド。本番設定に 2〜3 週
権限の付け替え・棚卸し月 20 時間プランから毎回導出するため作業が発生しない
入会承認のリードタイム2 営業日4 時間(承認待ちが 1 画面に集まる)
監査・セキュリティチェック対応都度 3〜5 日監査ログと検証項目の一覧をそのまま提出

空いた時間は、通常営業に戻せます。 会員基盤は差別化になりにくい一方、作り込みと事故対応に時間を持っていかれる領域です。

数字が見えると、売上が動く

会員状態・プラン・承認・監査ログが 1 箇所に揃うため、どこで人が止まっているかが数字で見えます。

月間 1,000 件の新規登録があるサービスの試算です。

段階導入前滞留を可視化して手を打った後
新規登録1,0001,000
メール認証の完了780860
承認まで到達640790
有料プラン契約192245

月額 5,000 円のプランであれば、月次で +26.5 万円、年間で +318 万円の増収に相当します(+27.6%)。

内訳は特別なことではありません。「メール認証で 220 件落ちている」「承認待ちが 140 件滞留している」が見えたから、リマインドと承認 SLA を直した、というだけです。見えなければ、この 2 つは着手されません。


ホスティング版(SaaS)もご用意しています

自己ホストは、機能が削られていない代わりに運用が付いてきます。

  • Firebase / Identity Platform のプロジェクト運用と承認済みドメイン管理
  • 暗号鍵・サービスアカウント鍵・Stripe キーの保管とローテーション
  • Stripe webhook の常時受信
  • WAF / DDoS 対策と、オリジンへの直アクセス遮断
  • メールの到達率(SPF / DKIM / DMARC)
  • 稼働・エラー・不正試行の監視、依存の脆弱性対応

この一覧を持ちたくない場合は、ホスティング版(SaaS)が向いています。 上記の運用は当社が引き受け、お客様は会員基盤としての機能だけをお使いいただけます。専有環境・SLA・優先サポートを含む構成もご相談を承ります。

項目内容
提供形態当社が運用するホスティング版 / 専有環境
価格個別お見積り(会員数・要件をうかがって概算をご提示します)
導入支援既存の会員データからの移行、SSO・監査要件の設定
お問い合わせhttps://nupwhite.com/contact

ライセンス

AGPL-3.0 です。自己ホストして商用にお使いいただけます。

改変してネットワーク越しにサービスとして提供する場合、AGPL は改変後のソースの公開を求めます。それが難しい場合のために、商用ライセンスを用意しています。なお、自分の API を叩くだけの利用は AGPL の対象外です。


技術構成

項目内容
アプリケーションNext.js 16 / React 19 / TypeScript
認証・データベースFirebase Authentication / Firestore
決済Stripe Checkout / Customer Portal / Webhook(Stripe Connect 対応)
連携REST API / MCP サーバー(9 ツール)
ライセンスAGPL-3.0(商用ライセンスあり)
リポジトリhttps://github.com/nup-cloud/memberkit

会社概要

項目内容
会社名株式会社NUP WHITE
所在地東京都中央区晴海3-10-1 Daiwa晴海 2F
事業内容データ基盤・AI基盤の開発/AI駆動開発による技術支援
URLhttps://nupwhite.com

本件に関するお問い合わせ

memberkit の導入相談、ホスティング版(SaaS)のお見積り、商用ライセンスのご相談を承っております。資料のご送付、セキュリティチェックシートへのご記入、秘密保持契約の締結にも対応いたします。

株式会社NUP WHITE リポジトリ:https://github.com/nup-cloud/memberkit お問い合わせフォーム(https://nupwhite.com/contact)