Skip to content

mochiOS/Accounts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mochiOS Accounts

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 dev

public/は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

About

mochiOS Account system

Resources

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages