Security Best Practices
Breaking Changes (Security Hardening v1.1.0)
1. Issuer URL Validation (CRITICAL)
// ✅ Valid configurations
Issuer: "https://company.okta.com" // Production
Issuer: "http://localhost:8080" // Local testing only
Issuer: "http://127.0.0.1:8080" // Local testing only
// ❌ Invalid - will fail validation
Issuer: "http://company.okta.com" // Must use HTTPS
Issuer: "company.okta.com" // Missing scheme
Issuer: "https://192.168.1.1/issuer" // IP addresses not allowed2. State Signing Key Initialization
3. Nonce Generation Failure Behavior
4. CreateRequestAuthHook Now Rejects Requests
5. Redirect URI Validation in Config
6. Error Message Simplification
Backward-Compatible Changes
🔒 Secrets Management
Never Commit Secrets
Environment Variables
.gitignore
🔐 JWT Secret Strength (HMAC Provider)
Minimum Requirements
Validation
Rotation
🌐 HTTPS in Production
Always Use TLS
Get Certificates
Certificate Management
🎯 Audience Validation
Why Audience Matters
Configuration
Validation
🔄 Token Caching & Expiration
Cache Behavior
Token Expiration Recommendations
🛡️ PKCE (Proof Key for Code Exchange)
Automatic Protection
No Configuration Needed
🚪 Redirect URI Security
Native Mode (Client OAuth)
Proxy Mode (Server OAuth)
🎫 Token Security
Token Storage (Client Side)
Token Transmission
🔍 Logging & Monitoring
What Gets Logged
What NOT to Log
Custom Logger for Production
🚨 Rate Limiting
Built-in Rate Limiter
Additional Protection
🔁 Security Headers
🛡️ Built-in Security Features
State Replay Protection
Token Cache Security
Input Validation
Issuer URL Validation
Constant-Time Cryptography
Secure Random Number Generation
Session Management (Official SDK)
📋 Security Checklist
Pre-Production
Regular Maintenance
🚩 Security Incidents
Token Compromise
Suspicious Activity
📚 Additional Resources
🤝 Reporting Security Issues
Last updated
Was this helpful?