mirror of
https://github.com/wahyd4/passkey-auth.git
synced 2026-08-08 20:15:44 +10:00
- Complete WebAuthn/FIDO2 authentication implementation - SQLite database with user and credential management - Email-based user identification with allowlist support - Admin approval workflow for new users - Session management with secure cookies - Docker containerization with Debian base for SQLite compatibility - Kubernetes deployment manifests with nginx ingress support - Web-based admin interface for user management - Comprehensive documentation and deployment guides - Standard open source project structure with CI/CD
6.8 KiB
6.8 KiB
Production Deployment Guide
This guide covers deploying Passkey Auth in a production Kubernetes environment.
Prerequisites
- Kubernetes cluster with nginx ingress controller
- Domain name with SSL certificate
- kubectl access to the cluster
- Docker registry access (optional, for custom builds)
Step 1: Prepare Configuration
- Generate Session Secret:
openssl rand -base64 32
- Update Kubernetes Configuration:
Edit k8s/deployment.yaml and update the ConfigMap:
data:
config.yaml: |
server:
port: "8080"
host: "0.0.0.0"
webauthn:
rp_display_name: "Your Company Auth"
rp_id: "auth.yourcompany.com" # Your auth domain
rp_origins:
- "https://auth.yourcompany.com" # Your auth URL
- "https://app.yourcompany.com" # Your app URLs
database:
path: "/data/passkey-auth.db"
cors:
allowed_origins:
- "https://auth.yourcompany.com"
- "https://app.yourcompany.com"
auth:
session_secret: "YOUR_GENERATED_SECRET_HERE"
require_approval: true
Step 2: Deploy to Kubernetes
- Create Namespace:
kubectl apply -f k8s/namespace.yaml
- Deploy Application:
kubectl apply -f k8s/deployment.yaml
- Verify Deployment:
kubectl get pods -n passkey-auth
kubectl logs -f deployment/passkey-auth -n passkey-auth
Step 3: Configure SSL/TLS
Create an ingress with SSL termination:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: passkey-auth-ingress
namespace: passkey-auth
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod" # If using cert-manager
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- auth.yourcompany.com
secretName: passkey-auth-tls
rules:
- host: auth.yourcompany.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: passkey-auth-service
port:
number: 80
Step 4: Configure Your Application Ingress
Update your application's ingress to use passkey auth:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: your-app-ingress
annotations:
# Auth configuration
nginx.ingress.kubernetes.io/auth-url: "http://passkey-auth-service.passkey-auth.svc.cluster.local/auth"
nginx.ingress.kubernetes.io/auth-signin: "https://auth.yourcompany.com"
nginx.ingress.kubernetes.io/auth-response-headers: "X-Auth-User,X-Auth-User-ID"
# SSL configuration
cert-manager.io/cluster-issuer: "letsencrypt-prod"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- app.yourcompany.com
secretName: your-app-tls
rules:
- host: app.yourcompany.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: your-app-service
port:
number: 80
Step 5: Set Up Monitoring (Optional)
Health Checks
The service includes health checks at /health. Configure monitoring:
# Add to your monitoring stack
- job_name: 'passkey-auth'
static_configs:
- targets: ['passkey-auth-service.passkey-auth.svc.cluster.local:80']
metrics_path: '/health'
Log Aggregation
Configure log forwarding to your logging system:
kubectl logs -f deployment/passkey-auth -n passkey-auth | your-log-forwarder
Step 6: Backup Strategy
Database Backup
Set up regular backups of the SQLite database:
# Create a backup cronjob
apiVersion: batch/v1
kind: CronJob
metadata:
name: passkey-auth-backup
namespace: passkey-auth
spec:
schedule: "0 2 * * *" # Daily at 2 AM
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: alpine
command:
- /bin/sh
- -c
- |
cp /data/passkey-auth.db /backup/passkey-auth-$(date +%Y%m%d).db
# Upload to your backup storage
volumeMounts:
- name: data
mountPath: /data
- name: backup
mountPath: /backup
restartPolicy: OnFailure
volumes:
- name: data
persistentVolumeClaim:
claimName: passkey-auth-storage
- name: backup
# Configure your backup storage volume
Security Checklist
- HTTPS enforced for all endpoints
- Session secret is randomly generated and secure
- CORS origins are specifically configured (not "*")
- WebAuthn RP ID matches your domain exactly
- Network policies restrict pod-to-pod communication
- Regular security updates applied
- Database backups are encrypted and tested
- Access logs are monitored
- Kubernetes RBAC is properly configured
Troubleshooting
Common Production Issues
-
WebAuthn Registration Fails:
- Verify RP ID matches domain exactly
- Ensure HTTPS is properly configured
- Check browser developer console for errors
-
Auth Backend Returns 502:
- Verify service is running:
kubectl get pods -n passkey-auth - Check service connectivity:
kubectl get svc -n passkey-auth - Review nginx ingress logs
- Verify service is running:
-
Session Issues:
- Verify session secret is consistent across restarts
- Check cookie domain settings
- Ensure persistent storage is working
Debug Commands
# Check service status
kubectl get all -n passkey-auth
# View logs
kubectl logs -f deployment/passkey-auth -n passkey-auth
# Test auth endpoint
kubectl exec -it deployment/passkey-auth -n passkey-auth -- wget -O- http://localhost:8080/health
# Check ingress
kubectl describe ingress -n passkey-auth
# Port forward for testing
kubectl port-forward svc/passkey-auth-service 8080:80 -n passkey-auth
Scaling Considerations
High Availability
For high availability, consider:
- Multiple Replicas: Increase replica count in deployment
- Session Storage: Use Redis for shared session storage
- Database: Consider PostgreSQL for better concurrent access
- Load Balancing: Ensure proper session affinity
Performance Tuning
- Resource Limits: Adjust based on usage patterns
- Database Optimization: Regular VACUUM for SQLite
- Caching: Add caching layer for frequently accessed data
Updates and Maintenance
Rolling Updates
# Update the image
kubectl set image deployment/passkey-auth passkey-auth=passkey-auth:v1.1.0 -n passkey-auth
# Monitor rollout
kubectl rollout status deployment/passkey-auth -n passkey-auth
# Rollback if needed
kubectl rollout undo deployment/passkey-auth -n passkey-auth
Database Migrations
For schema changes, implement migration scripts and run them during maintenance windows.
This production guide ensures a secure, reliable deployment of Passkey Auth in your Kubernetes environment.