Token types
Access tokens
- Lifetime: Short-lived (5-60 minutes)
- Purpose: Authorize API requests
- Storage: HttpOnly cookies or Authorization headers
- Validation: Required on every request
Refresh tokens
- Lifetime: Long-lived (days to months)
- Purpose: Obtain new access tokens
- Storage: Secure HttpOnly cookies
- Rotation: Single-use with automatic rotation
ID tokens
- Lifetime: Varies (usually matches access token)
- Purpose: User identity information
- Storage: Cookies or secure storage
- Usage: Logout flows and user profile
Secure storage
Web applications
Use HttpOnly cookies with security attributes:Single-page applications
- Store access tokens in memory
- Use Authorization headers for API calls
- Never use localStorage or sessionStorage
- Refresh tokens in HttpOnly cookies
Mobile applications
- iOS: Use Keychain Services
- Android: Use KeyStore system
- Implement certificate pinning
- Clear tokens on logout
Token encryption
Encrypt tokens before storage:Token validation
Validate tokens on every protected request:Token refresh
Refresh tokens transparently in middleware:Token rotation
Implement refresh token rotation to detect theft:- Issue new refresh token on each refresh
- Invalidate old refresh token immediately
- Track token families to detect concurrent use
- Revoke all tokens if theft detected
Security best practices
Never log tokens
Validate token claims
Handle clock skew
Implement rate limiting
Token revocation
Revoke tokens when needed:Next steps
Session policies
Configure session timeouts
Best practices
Authentication security guide
Session management
Session concepts