- Added docs/AUTH.md with authentication system documentation - Added server scripts (auto-deploy, backup, monitor, webhook-server) - Updated README with deployment info and project structure - Added gitignore for backup archives
8.5 KiB
b0esche.cloud Authentication System
This document describes the complete passkey-first authentication and authorization system for b0esche.cloud.
Overview
b0esche.cloud implements a modern, secure, username-only, passkey-first authentication system with comprehensive admin functionality and recovery options.
Authentication Flow
Primary Authentication: Passkeys (WebAuthn)
- Username + Passkey Registration: Users create an account with just a username and register a passkey
- Passkey-First Login: Primary authentication method using WebAuthn/FIDO2 standards
- Device Support: Works with Touch ID, Windows Hello, YubiKey, and other FIDO2 authenticators
- Multiple Passkeys: Users can register multiple devices for redundancy
Fallback Options
- Optional Password: Users can add a password as a fallback authentication method
- Recovery Codes: 10 single-use recovery codes generated per user
- Admin Recovery: Admins can assist with account recovery if needed
User Roles and Permissions
Role Hierarchy
-
superadmin (Level 3): Full system access
- User management and role assignments
- Admin invitation system
- System configuration access
- All organization management
-
admin (Level 2): Administrative access
- Organization management
- User role promotion (within their orgs)
- Activity monitoring
- File management across organizations
-
user (Level 1): Standard user access
- Personal file management
- Organization membership
- Basic account settings
Bootstrap Process
Creating the First Administrator
The system includes a bootstrap utility to create the first superadmin user securely:
# Interactive mode (recommended for production)
./bin/bootstrap
# Environment variable mode (recommended for automation)
export BOOTSTRAP_ADMIN_USERNAME=admin
export BOOTSTRAP_ADMIN_PASSWORD=secure_password_123
./bin/bootstrap
Bootstrap Process
- Check Existing Admin: Verifies no superadmin user already exists
- Secure Input: Prompts for username and password (or reads from environment)
- Password Security: Enforces minimum 8-character passwords
- Role Assignment: Automatically assigns superadmin role
- Secure Storage: Passwords are bcrypt-hashed before storage
Security Guidelines
- Immediate Action: Log in immediately after bootstrap to register a passkey
- Passkey Priority: Set up passkeys and consider removing the password
- Recovery Setup: Generate recovery codes during first login
- Credential Rotation: Never leave default credentials in production
API Endpoints
Authentication Endpoints
POST /auth/passkey/register/start
POST /auth/passkey/register/verify
POST /auth/passkey/login/start
POST /auth/passkey/login/verify
Device Management
GET /auth/passkey/devices # List user's passkeys
POST /auth/passkey/devices/add # Add new passkey
DELETE /auth/passkey/devices/{id} # Remove passkey
Recovery System
POST /auth/recovery/codes/generate # Generate recovery codes
POST /auth/recovery/codes/use # Use recovery code
DELETE /auth/recovery/codes/revoke # Revoke all codes
Admin Operations
GET /auth/admin/invitations # List invitations
POST /auth/admin/invitations # Create invitation
POST /auth/admin/invitations/accept # Accept invitation
DELETE /auth/admin/invitations/{id} # Revoke invitation
Password Fallback
POST /auth/password/add # Add password to account
DELETE /auth/password/remove # Remove password from account
Environment Configuration
# Server Configuration
SERVER_ADDR=:8080
DATABASE_URL=postgresql://user:pass@localhost/db
# WebAuthn Configuration
WEBAUTHN_RP_ID=www.b0esche.cloud
WEBAUTHN_RP_NAME=b0esche.cloud
WEBAUTHN_RP_ORIGIN=https://www.b0esche.cloud
# Security Configuration
JWT_SECRET=your_jwt_secret_key
PASSKEY_TIMEOUT=300000
RECOVERY_CODE_EXPIRY=86400
MAX_RECOVERY_CODES=10
Security Features
WebAuthn Security
- FIDO2/WebAuthn Compliant: Full compliance with WebAuthn Level 2
- Origin Binding: Credentials bound to specific domain
- Challenge-Response: Cryptographic challenge verification
- Device Attestation: Optional device verification
- Public Key Crypto: Asymmetric cryptography with private keys never leaving devices
Account Security
- Rate Limiting: Built-in protection against brute force attacks
- Session Management: Secure HTTP-only sessions with configurable expiration
- Audit Logging: Comprehensive logging of all authentication and admin actions
- Role-Based Access Control: Hierarchical permission system
Data Protection
- Password Hashing: bcrypt with automatic salt generation
- Recovery Code Hashing: Secure one-way hashing of recovery codes
- No Plaintext Storage: No sensitive data stored in plaintext
- Input Validation: Comprehensive input sanitization and validation
Database Schema
The authentication system uses the following key tables:
- users: User accounts with role-based access control
- roles: Hierarchical role definitions
- passkeys: WebAuthn credential storage
- recovery_codes: One-time recovery codes
- admin_invitations: Secure admin invitation system
- sessions: Secure session management
Development and Testing
Running Locally
- Setup Database: Ensure PostgreSQL is running with migrations applied
- Bootstrap Admin: Run the bootstrap command to create first admin
- Start Server: Run the API server with appropriate environment
- Test Authentication: Use the Flutter app or API tests
Testing WebAuthn
WebAuthn requires HTTPS in production browsers. For local testing:
# Use mkcert for local HTTPS
mkcert -install
mkcert localhost 127.0.0.1 ::1
# Set environment for local development
export WEBAUTHN_RP_ID=localhost
export WEBAUTHN_RP_ORIGIN=https://localhost:8080
User Experience
Signup Flow
- Username Selection: User chooses a unique username
- Real-time Validation: Immediate feedback on username availability
- Passkey Creation: Browser prompts for passkey registration
- Account Creation: Automatic account creation with passkey
Login Flow
- Passkey Detection: System shows available passkeys
- Biometric Prompt: Browser authenticates with passkey
- Session Creation: Secure session established
- Redirect: User directed to dashboard
Security Settings
Users can manage their security through the Settings > Security page:
- Device Management: View, add, remove, and label passkeys
- Recovery Codes: Generate new recovery codes
- Password Options: Add or remove password fallback
- Account Recovery: Secure account recovery options
Troubleshooting
Common Issues
- WebAuthn Not Supported: Use a modern browser (Chrome, Firefox, Safari, Edge)
- HTTPS Required: WebAuthn requires HTTPS in production environments
- Device Compatibility: Ensure devices support FIDO2/WebAuthn
- Database Connection: Verify database connection and migrations
Bootstrap Issues
- Permission Denied: Ensure proper file permissions on bootstrap binary
- Database Connection: Check DATABASE_URL configuration
- Port Conflicts: Ensure database port is accessible
Recovery Process
If a user loses access to all passkeys:
- Use Recovery Code: Enter one of the 10 recovery codes
- Contact Admin: Admins can assist with account recovery
- Re-register Passkey: Set up new passkeys after recovery
- Generate New Recovery Codes: Replace used recovery codes
Monitoring and Maintenance
Key Metrics
Monitor these metrics for system health:
- Authentication success/failure rates
- Passkey registration and usage patterns
- Recovery code usage frequency
- Admin action audit logs
- Session expiration and renewal rates
Maintenance Tasks
Regular maintenance includes:
- Clean up expired sessions and recovery codes
- Review audit logs for suspicious activity
- Update role assignments as needed
- Monitor WebAuthn compatibility with browser updates
Support and Documentation
For additional support:
- Technical Issues: Check application logs and database status
- Security Concerns: Review audit logs and user activity
- Feature Requests: Follow the contribution guidelines
- Documentation Updates: Keep this document current with system changes
Last Updated: January 2026
Version: 1.0
Compatibility: WebAuthn Level 2, FIDO2