feat(M2): Authentication, Authorization & Frontend Shell
- pm-auth::password: Argon2id (m=65536,t=3,p=1) hashing + verification - pm-auth::jwt: EdDSA/Ed25519 JWT issuance + validation (15-min TTL) - pm-auth::refresh: Opaque 256-bit refresh tokens, SHA-256 hashed, 1-hour sliding inactivity timeout, rotation on use, revocable - pm-auth::mfa_totp: TOTP setup/verify (HMAC-SHA1, 6-digit, 30s) with otpauth:// URI generation (Google Authenticator compatible) - pm-auth::mfa_webauthn: Stub (full implementation deferred) - pm-auth::rbac: Axum middleware for JWT auth + IP whitelist + admin/operator role enforcement + FromRequestParts extractor - pm-auth::session: Full login flow (password → MFA → tokens), token refresh, logout, force-logout - pm-web auth routes: POST /api/v1/auth/login|refresh|logout, GET /api/v1/auth/mfa/setup, POST /api/v1/auth/mfa/verify - IP whitelist middleware on all protected connection points - migrations/002_seed_admin.sql: Default admin account seed - Frontend: Auth store (Zustand with persistence), login page with MFA prompt, MFA setup page (stepper), JWT auto-refresh interceptor, route guards (RequireAuth), updated App.tsx routing - cargo check --workspace: zero errors, 1 minor warning Closes M2.
This commit is contained in:
12
Cargo.toml
12
Cargo.toml
@ -22,6 +22,7 @@ tokio = { version = "1", features = ["full"] }
|
||||
|
||||
# Web framework
|
||||
axum = { version = "0.8", features = ["ws", "macros"] }
|
||||
axum-extra = { version = "0.10", features = ["typed-header"] }
|
||||
tower = { version = "0.5" }
|
||||
tower-http = { version = "0.6", features = ["fs", "trace", "cors", "request-id"] }
|
||||
|
||||
@ -60,3 +61,14 @@ config = { version = "0.15" }
|
||||
# Misc
|
||||
bytes = { version = "1" }
|
||||
futures = { version = "0.3" }
|
||||
|
||||
# Authentication & Security
|
||||
argon2 = { version = "0.5", features = ["std"] }
|
||||
jsonwebtoken = { version = "9" }
|
||||
rand = { version = "0.8", features = ["std"] }
|
||||
totp-rs = { version = "5", features = ["gen_secret", "otpauth"] }
|
||||
base64 = { version = "0.22" }
|
||||
hex = { version = "0.4" }
|
||||
sha2 = { version = "0.10" }
|
||||
ipnet = { version = "2" }
|
||||
url = { version = "2" }
|
||||
|
||||
Reference in New Issue
Block a user