Advanced cryptographic authentication that replaces static admin keys with time-limited HMAC proofs stored in Firestore.
Sauron Pro implements a sophisticated Firestore-witnessed authentication system that replaces static admin keys with time-limited cryptographic proofs. This provides enhanced security by ensuring admin credentials are never transmitted over the network.
The admin panel generates a cryptographic proof using HMAC-SHA256:
// TypeScript - Admin Panel const payload = `${requestId}:${userAgent}:${clientIP}:${validUntil}:${createdAt}`; const signature = crypto .createHmac('sha256', adminKey) .update(payload) .digest('hex'); // Store in Firestore await db.collection('auth_proofs').doc(requestId).set({ proof: signature, valid_until: validUntil, created_at: createdAt, user_agent: userAgent, client_ip: clientIP, proof_type: 'admin_auth' });
{ "request_id": "a35905f9c363f8be3e297a5b59d8cf29", "proof": "3e69289a81eb9ef8774df5a5bfdef287ff8549c57614a5a3afd1a85dd4e17487", "valid_until": 1755734576, "created_at": 1755648976, "user_agent": "NextJS-Admin-Panel/1.0", "client_ip": "::1", "proof_type": "admin_auth" }
// auth/firestore_witness.go func ValidateFirestoreAuth(requestID, validUntilStr string) (*AuthResult, error) { // Retrieve proof from Firestore doc, err := firestoreClient.Collection("auth_proofs").Doc(requestID).Get(ctx) if err != nil { return nil, fmt.Errorf("proof not found: %w", err) } var proof FirestoreProof if err := doc.DataTo(&proof); err != nil { return nil, fmt.Errorf("invalid proof format: %w", err) } // Validate timing if time.Now().Unix() > proof.ValidUntil { return nil, errors.New("proof expired") } // Validate HMAC signature adminKey := configdb.GetAdminKey() payload := fmt.Sprintf("%s:%s:%s:%d:%d", requestID, proof.UserAgent, proof.ClientIP, proof.ValidUntil, proof.CreatedAt) expectedHMAC := hmac.New(sha256.New, []byte(adminKey)) expectedHMAC.Write([]byte(payload)) expectedSignature := hex.EncodeToString(expectedHMAC.Sum(nil)) if !hmac.Equal([]byte(proof.Proof), []byte(expectedSignature)) { return nil, errors.New("invalid signature") } return &AuthResult{ Method: "firestore-witnessed", Valid: true, Source: "firestore", }, nil }
// src/lib/authManager.ts export class AuthManager { async authenticatedFetch(endpoint: string, options: RequestInit = {}): Promise<Response> { const requestId = this.generateRequestId(); const validUntil = Math.floor(Date.now() / 1000) + (24 * 60 * 60); // 24 hours const createdAt = Math.floor(Date.now() / 1000); // Generate HMAC proof const payload = `${requestId}:NextJS-Admin-Panel/1.0:::${validUntil}:${createdAt}`; const signature = crypto .createHmac('sha256', this.adminKey) .update(payload) .digest('hex'); // Store proof in Firestore await this.db.collection('auth_proofs').doc(requestId).set({ proof: signature, valid_until: validUntil, created_at: createdAt, user_agent: 'NextJS-Admin-Panel/1.0', client_ip: '::1', proof_type: 'admin_auth' }); // Make authenticated request const headers = { 'X-Request-ID': requestId, 'X-Valid-Until': (validUntil * 1000).toString(), 'Content-Type': 'application/json', ...options.headers }; return fetch(endpoint, { ...options, headers }); } }
// Generate authentication proof GET /api/auth/proof Response: { "success": true, "requestId": "a35905f9c363f8be3e297a5b59d8cf29", "validUntil": "2025-08-21T00:02:56.000Z", "signature": "3e69289a81eb...", "usage": { "headers": { "X-Request-ID": "a35905f9c363f8be3e297a5b59d8cf29", "X-Valid-Until": "1755734576000" } } }
// Use authentication headers curl -X POST \ -H "X-Request-ID: a35905f9c363f8be3e297a5b59d8cf29" \ -H "X-Valid-Until: 1755734576000" \ -H "Content-Type: application/json" \ -d '{"action": "cleanup"}' \ https://your-domain.com/api/admin/cleanup Response: { "success": true, "authMethod": "firestore-witnessed", "data": {...} }
Invalid Signature: Check admin key configuration and payload format
Proof Expired: Generate new proof - maximum 24 hours validity
Firestore Connection: Verify Firestore credentials and project setup
// Enable debug logging curl -X GET \ -H "X-Request-ID: your-request-id" \ -H "X-Valid-Until: timestamp" \ https://your-domain.com/api/auth/debug // Check Firestore proof curl -X GET \ https://your-domain.com/api/auth/proof/your-request-id
Part of the Sauron Pro Documentation