Accountsは、mochiOSのAccount認証を担当する独立サービスです。Rustと
workers-rsで実装し、Cloudflare WorkersとD1上で動作します。
- GitHub OAuthログインとOAuth
state検証 - UUIDv7によるAccount、外部Identity、Session、監査ログの識別
- GitHub numeric IDを安定した外部識別子として使用
- GitHub OAuth grantのXChaCha20-Poly1305暗号化保存
- AppStore向けの公開Repository権限・固定Release asset検証
- 256 bitのopaque session tokenとSHA-256ハッシュ保存
- Accountの停止、論理削除、Session失効
- DeveloperCA向けSession introspectionとAccount状態取得
- Console向けの120秒・一回限り認可コード引き渡し
- 追記専用の認証監査ログ
- GitHubログイン、プロフィール変更、Session失効を行うWebフロントエンド
Developer、Certificate、App、Release、Package、MPKG、アップロード、Object StorageはAccountsの責務ではありません。
rustup target add wasm32-unknown-unknown
cargo install worker-build
npx wrangler d1 migrations apply mochios-accounts --local
npx wrangler devpublic/はWorkers Static Assetsとして同じWorkerから配信されます。/v1/*と
/healthはRust Workerを先に実行し、それ以外はフロントエンドへルーティングします。
.dev.varsへ次のsecretを設定してください。実値はコミットしないでください。
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
SERVICE_TOKEN=<DeveloperCAと共有する独立したランダム値>
CONSOLE_SERVICE_TOKEN=<Consoleとの認可コード交換専用の独立したランダム値>
APPSTORE_SERVICE_TOKEN=<AppStoreとの内部API専用の独立したランダム値>
GITHUB_TOKEN_ENCRYPTION_KEY=<32 bytesのBase64URL鍵>
GITHUB_TOKEN_ENCRYPTION_KEYは保存済みOAuth grantの復号に必要です。既存データを再暗号化せずに変更すると、保存済みgrantを復号できなくなります。
検証コマンド:
cargo test --lib
cargo clippy --target wasm32-unknown-unknown -- -D warnings