本プロジェクトは、過去に詐欺目的で運営されていたペニーオークションサイトの再現です。このコードベース上での実装は研究・教育目的であり、実際の金銭のやり取りは発生しません。本バックエンドを実際の決済システムと連携させて商用利用することは禁止されています。
.NET 10 (ASP.NET Core) で構築されたペニーオークション型リアルタイムアプリケーションの REST API サーバ。SignalR Hub による低遅延な入札更新ブロードキャスト、EF Core コードファーストマイグレーション、複数の HostedService による非同期バックグラウンド処理を備えます。本番サイト: https://www.caliphauction.com/
| 名前 | リンク | 役割 / 概要 |
|---|---|---|
| Frontend | https://github.com/xm-i/CaliphAuctionFront | SPA / Vue3 / SignalR クライアント |
| Backend (本リポジトリ) | https://github.com/xm-i/CaliphAuctionBackend | REST API / 入札 BOT / SignalR Hub |
| Infrastructure | https://github.com/xm-i/CaliphAuctionInfrastructure | IaC / CI/CD / 環境構築スクリプト |
※ ライセンスはいずれも「ソース公開 (再頒布不可)」ポリシーに準拠(各 README を参照)。
| 項目 | バージョン |
|---|---|
| .NET SDK | 10.0 |
| PostgreSQL | 15+ |
| 分類 | 技術 |
|---|---|
| フレームワーク | ASP.NET Core 10 (Minimal Hosting) |
| 言語 | C# 13 / .NET 10 |
| ORM | Entity Framework Core 10 + Npgsql |
| データベース | PostgreSQL 15+ |
| リアルタイム通信 | ASP.NET Core SignalR |
| 認証 | JWT Bearer (Microsoft.AspNetCore.Authentication.JwtBearer 10) |
| バックグラウンド処理 | IHostedService (AutoBid / AuctionTopUp) |
| API ドキュメント | Microsoft.AspNetCore.OpenApi (開発環境のみ) |
Hubs/AuctionHub.cs が SignalR Hub エンドポイント (/auctionHub) を公開します。入札発生時にサーバ側で ReceiveBidUpdate イベントをブロードキャストし、オークション終了時に ReceiveAuctionClosed を送信します。クライアントは SetVisibleItems メッセージで表示中アイテム ID 群を送信でき、サーバ側でブロードキャスト対象を最適化します。
Services/Background/AutoBidCoordinatorService.cs が定期的に入札キューを監視し、設定値 (AutoBid セクション) に基づいてボット入札を制御します。BotUserCache によりボット ユーザ情報を起動時にメモリキャッシュします。
残り秒数が設定閾値 (Auction:ExtendThresholdSeconds) を下回る入札に対して残り時間を延長します。延長量 (Auction:ExtendSeconds) はアプリケーション設定で制御されます。
PointTransaction / PointTransactionEntry / PointBalanceLot の 3 層構造でポイントの付与・消費・ロット管理を行います。キャンペーン (登録ボーナス等) は設定駆動で追加可能です。
パスワードは PBKDF2 ベースのソルト付きハッシュで保存します (Utils/SecurityUtils.cs)。JWT 署名検証 (Issuer / SymmetricSecurityKey)、フォールバックポリシーによる全エンドポイントの認証必須化、ログイン失敗回数の DB 記録による IP ブルートフォース対策を実装しています。
CaliphException サブクラス (ValidationCaliphException, AuthenticationFailedCaliphException 等) をスローすると、CaliphExceptionHandlingMiddleware が一貫した JSON レスポンスに変換します。
{ "error": "<message>", "status": 400 }未処理例外は 500 を返します (Development 環境のみ詳細メッセージ付与)。
HTTP リクエスト
↓
ForwardedHeaders ミドルウェア (リバースプロキシ対応)
↓
CORS ポリシー (DefaultCorsPolicy)
↓
Authentication / Authorization
↓
RequestLoggingMiddleware
↓
CaliphExceptionHandlingMiddleware
↓
Controller / Hub エンドポイント
├─ Controllers/ (REST API)
└─ Hubs/AuctionHub.cs (SignalR)
Controllers (HTTP 受付)
↓
Services/Implementations/ (ドメインロジック、属性ベース自動 DI 登録)
↓
Data/CaliphDbContext.cs (EF Core / Npgsql)
↓
PostgreSQL
IHostedService
├─ AuctionTopUpService (オークション補充・状態管理)
└─ AutoBidCoordinatorService (ボット入札キュー制御)
CaliphAuctionBackend/
Controllers/
AuctionController.cs # オークション一覧・詳細・入札 API
UserController.cs # 認証・ユーザ登録 API
PointsController.cs # ポイント残高・チャージ API
PurchasesController.cs # 購入履歴 API
MyPageController.cs # マイページ情報 API
External/ # 外部決済連携 Controller 群
Data/
CaliphDbContext.cs # DbContext・タイムスタンプ自動設定
Migrations/ # EF Core マイグレーションファイル
Hubs/
AuctionHub.cs # SignalR Hub (入札イベント管理)
Middleware/
CaliphExceptionHandlingMiddleware.cs
RequestLoggingMiddleware.cs
Models/ # EF Core エンティティ
BaseEntity.cs # 共通タイムスタンプ基底クラス
AuctionItem.cs
Bid.cs
User.cs
PointTransaction.cs
...
Services/
Background/ # IHostedService 実装
Implementations/ # ドメインサービス (自動 DI 登録)
Interfaces/ # サービスインタフェース定義
Infrastructure/ # 設定オプションクラス群
Dtos/ # API 入出力 DTO
Exceptions/ # CaliphException サブクラス群
Utils/
SecurityUtils.cs # パスワードハッシュ / JWT 生成
MathUtils.cs
Attributes/ # DI 自動登録属性
Program.cs # エントリポイント・DI・パイプライン構成
appsettings.json
git clone https://github.com/xm-i/CaliphAuctionBackend.git
cd CaliphAuctionBackend
dotnet restorePostgreSQL 15+ が必要です。Docker を使用する場合:
docker run -d --name caliph-pg -p 5432:5432 \
-e POSTGRES_PASSWORD=caliph \
-e POSTGRES_USER=caliph \
-e POSTGRES_DB=caliph \
postgres:15appsettings.Development.json を作成し、以下を設定してください:
{
"ConnectionStrings": {
"DefaultConnection": "Host=localhost;Database=caliph;Username=caliph;Password=caliph"
},
"Jwt": {
"Key": "<32 文字以上の署名キー>",
"Issuer": "CaliphAuction",
"ExpireMinutes": 60
},
"ExternalPaymentJwt": {
"Key": "<外部決済用署名キー>"
},
"Cors": {
"AllowedOrigins": [ "http://localhost:5173" ]
}
}dotnet tool install --global dotnet-ef
dotnet ef database update \
--project CaliphAuctionBackend/CaliphAuctionBackend.csprojdotnet run --project CaliphAuctionBackend/CaliphAuctionBackend.csprojデフォルトでは https://localhost:5000 で起動します。OpenAPI ドキュメントは https://localhost:5000/openapi/v1.json で参照できます (Development のみ)。
| キー | 説明 |
|---|---|
ConnectionStrings:DefaultConnection |
PostgreSQL 接続文字列 |
Jwt:Key |
JWT 署名キー (十分な長さ) |
Jwt:Issuer |
JWT 発行者名 |
Jwt:ExpireMinutes |
JWT 有効期限 (分) |
ExternalPaymentJwt:Key |
外部決済連携用トークン署名キー |
Cors:AllowedOrigins |
許可オリジン配列 (AllowCredentials のため * 不可) |
Auction:ExtendThresholdSeconds |
時間延長が発動する残り秒数閾値 |
Auction:ExtendSeconds |
延長秒数 |
AutoBid:* |
自動入札間隔・キュー制御設定 |
Points:RegistrationBonus |
登録時付与ポイント数 |
本番サーバに SDK を配置しない運用方針のため、DDL は手動管理です。
ローカルでのマイグレーション追加とスクリプト出力:
dotnet ef migrations add AddSomething \
--project CaliphAuctionBackend/CaliphAuctionBackend.csproj
dotnet ef migrations script -o diff.sqlワークフロー: .github/workflows/build-publish.yml
dotnet publish(Release /UseAppHost=false)- Secrets / Variables から
appsettings.Production.jsonを生成 app.tar.gzとしてアーティファクト化- SSH 経由で
DEPLOY_PATH/releases/<timestamp>に展開しcurrentシンボリックリンクを切り替え - systemd ユニットを再起動
必要 Secrets: DB_CONNECTION, JWT_KEY, EXTERNAL_JWT_KEY, SSH_KEY
必要 Variables: CORS_ALLOWED_ORIGINS
- JWT 秘密鍵は必ず Secrets / Vault で管理し、設定ファイルにハードコードしない
- 自動マイグレーション (
Database.MigrateAsync) は本番環境で実行しない Cors:AllowedOriginsに*ワイルドカードは使用不可 (AllowCredentialsと非互換)- SQL ログは本番環境で抑制する (接続文字列・クエリの漏えい防止)
ForwardedHeadersミドルウェアのKnownProxiesにはリバースプロキシ IP のみを登録する
このリポジトリは「ソースコード閲覧・学習目的での公開」であり、一般的な OSS ライセンス (MIT / Apache など) ではありません。いわゆる Source-Available ポリシーです。
- 個人的または社内での学習・参考・評価
- 自身の環境でのビルド・実行・検証
- 一部コード断片 (短い抜粋) を引用した技術記事等への掲載 (出典明記が条件)
- 本リポジトリ全体または実質的主要部分の再頒布 (フォークを含む公的再公開)
- コードの改変版を公衆に提供 / ホスティング / SaaS として提供
- ライセンス互換を前提とした他 OSS への組み込み
- 商用目的 (利用・販売・再販) での使用
- 上記に該当しない利用 (教材化 / セミナー利用 / 研究引用 など) を希望する場合は事前に相談してください。
- いつでもライセンス/公開方針を変更・終了する可能性があります。
- Issue / PR は受け付けますが、マージ/反映は保証されません。
将来的に OSS ライセンスへ移行する場合は明示的に本節を置き換えます。それまでは本記述が優先します。
| 領域 | ファイル |
|---|---|
| エントリポイント・DI 構成 | Program.cs |
| 例外ハンドラ | Middleware/CaliphExceptionHandlingMiddleware.cs |
| DbContext | Data/CaliphDbContext.cs |
| JWT 設定 | appsettings.json (Jwt.*) |
| SignalR Hub | Hubs/AuctionHub.cs |
| バックグラウンドサービス | Services/Background/ |
| セキュリティユーティリティ | Utils/SecurityUtils.cs |
| 入札サービス | Services/Implementations/BidService.cs |
改善提案 / バグ報告は Issue へ。重大なセキュリティ懸念は公開前に直接連絡してください。

