Security Features
ngxsmk-gatekeeper provides comprehensive security middleware to protect your Angular application.
IP Filtering
IP Whitelisting
Allow requests only from specific IP addresses or CIDR ranges:
typescript
import { createIPWhitelistMiddleware } from 'ngxsmk-gatekeeper';
const whitelistMiddleware = createIPWhitelistMiddleware({
allowedIPs: [
'192.168.1.1', // Single IP
'10.0.0.0/8', // CIDR range
'172.16.0.0/12' // Another CIDR range
],
blockMode: 'redirect',
redirect: '/access-denied'
});
provideGatekeeper({
middlewares: [whitelistMiddleware]
});IP Blacklisting
Block specific IP addresses:
typescript
import { createIPBlacklistMiddleware } from 'ngxsmk-gatekeeper';
const blacklistMiddleware = createIPBlacklistMiddleware({
blockedIPs: ['1.2.3.4', '5.6.7.8'],
reason: 'Suspicious activity',
redirect: '/blocked'
});CSRF Protection
Protect against Cross-Site Request Forgery attacks:
typescript
import { createCSRFMiddleware, getCSRFToken } from 'ngxsmk-gatekeeper';
const csrfMiddleware = createCSRFMiddleware({
tokenHeader: 'X-CSRF-Token',
cookieName: 'csrf-token',
protectedMethods: ['POST', 'PUT', 'PATCH', 'DELETE'],
exemptPaths: ['/api/public']
});
// Server-side: Generate token
const token = getCSRFToken();
// Set in cookie: document.cookie = `csrf-token=${token}`
provideGatekeeper({
middlewares: [csrfMiddleware]
});Session Management
Automatic session timeout and renewal:
typescript
import { createSessionMiddleware } from 'ngxsmk-gatekeeper';
const sessionMiddleware = createSessionMiddleware({
timeout: 3600, // 1 hour in seconds
extendOnActivity: true,
sessionPath: 'session',
lastActivityPath: 'lastActivity',
expiresAtPath: 'expiresAt',
redirect: '/login'
});API Key Validation
Protect APIs with key validation:
typescript
import { createAPIKeyMiddleware } from 'ngxsmk-gatekeeper';
const apiKeyMiddleware = createAPIKeyMiddleware({
headerName: 'X-API-Key',
queryParamName: 'api_key', // Alternative to header
validateKey: async (key, context) => {
// Check key in database
const isValid = await checkAPIKeyInDatabase(key);
return isValid;
},
rateLimitPerKey: true,
rateLimitConfig: {
maxRequests: 1000,
windowMs: 60000 // 1 minute
}
});Account Lockout
Protect against brute force attacks:
typescript
import { createAccountLockoutMiddleware } from 'ngxsmk-gatekeeper';
const lockoutMiddleware = createAccountLockoutMiddleware({
maxAttempts: 5,
lockoutDuration: 900, // 15 minutes
resetOnSuccess: true,
userIdPath: 'user.id',
checkAuthSuccess: (context) => {
return context['user']?.isAuthenticated === true;
}
});Webhook Signature Verification
Verify webhook signatures:
typescript
import { createWebhookSignatureMiddleware } from 'ngxsmk-gatekeeper';
const webhookMiddleware = createWebhookSignatureMiddleware({
secret: process.env.WEBHOOK_SECRET!,
algorithm: 'sha256',
headerName: 'X-Signature'
});Device Fingerprinting
Track and validate devices:
typescript
import { createDeviceFingerprintMiddleware } from 'ngxsmk-gatekeeper';
const fingerprintMiddleware = createDeviceFingerprintMiddleware({
trackDevices: true,
blockSuspicious: true,
requireDeviceRegistration: false,
generateFingerprint: (context) => {
// Custom fingerprint generation
const ua = context['request']?.headers.get('user-agent') || '';
return btoa(ua).substring(0, 32);
},
isSuspicious: async (fingerprint, context) => {
// Check if device is suspicious
return await checkSuspiciousDevice(fingerprint);
}
});User-Agent Validation
Block bots and validate browsers:
typescript
import { createUserAgentMiddleware } from 'ngxsmk-gatekeeper';
const userAgentMiddleware = createUserAgentMiddleware({
allowedAgents: [/Chrome/, /Firefox/, /Safari/],
blockedAgents: [/bot/i, /crawler/i],
blockBots: true,
redirect: '/unsupported-browser'
});Multi-Factor Authentication
Enforce MFA:
typescript
import { createMFAMiddleware } from 'ngxsmk-gatekeeper';
const mfaMiddleware = createMFAMiddleware({
required: true,
methods: ['totp', 'sms', 'email'],
mfaPath: 'user.mfaVerified',
mfaMethodPath: 'user.mfaMethod',
redirect: '/mfa-verify'
});OAuth2 Integration
OAuth2 authentication:
typescript
import { createOAuth2Middleware } from 'ngxsmk-gatekeeper';
const oauth2Middleware = createOAuth2Middleware({
provider: 'google',
clientId: process.env.GOOGLE_CLIENT_ID!,
scopes: ['openid', 'profile', 'email'],
validateToken: async (token, context) => {
return await verifyOAuth2Token(token);
},
redirect: '/login'
});JWT Token Refresh
Automatic token refresh:
typescript
import { createJWTRefreshMiddleware } from 'ngxsmk-gatekeeper';
const jwtRefreshMiddleware = createJWTRefreshMiddleware({
refreshThreshold: 300, // 5 minutes before expiry
autoRefresh: true,
refreshEndpoint: '/api/auth/refresh',
refreshToken: async (context) => {
const response = await fetch('/api/auth/refresh', {
method: 'POST',
headers: { 'Authorization': `Bearer ${context['token']}` }
});
const data = await response.json();
return {
token: data.token,
expiresAt: data.expiresAt
};
}
});Best Practices
- Always use HTTPS - Security middleware is ineffective over HTTP
- Server-side validation - Client-side middleware can be bypassed
- Rate limiting - Combine with server-side rate limiting
- Logging - Enable audit logging for security events
- Monitoring - Monitor security events and alerts
Security Checklist
- [ ] IP whitelisting/blacklisting configured
- [ ] CSRF protection enabled
- [ ] Session management configured
- [ ] API keys validated
- [ ] Account lockout enabled
- [ ] MFA required for sensitive operations
- [ ] Webhook signatures verified
- [ ] Device fingerprinting enabled (if needed)
- [ ] User-agent validation configured
- [ ] Security headers set
- [ ] Audit logging enabled
Next Steps
- Request Validation - Validate request data
- Access Control - Time windows and geo-blocking
- Monitoring - Analytics and logging