API Security Best Practices
Comprehensive API security patterns and practices used in Ever Gauzy.
Authenticationโ
All API endpoints (except public endpoints) require JWT authentication:
Authorization: Bearer {jwt-token}
Token Lifecycleโ
- User authenticates via
/api/auth/login - Server issues a JWT access token (short-lived) and refresh token (long-lived)
- Client includes access token in all requests
- When access token expires, client uses refresh token to get a new one
- When refresh token expires, user must re-authenticate
Token Configurationโ
| Variable | Description | Recommended |
|---|---|---|
JWT_SECRET | Signing key | 256-bit random |
JWT_TOKEN_EXPIRATION_TIME | Access token TTL | 3600 (1 hour) |
JWT_REFRESH_SECRET | Refresh key | 256-bit random |
JWT_REFRESH_EXPIRATION_TIME | Refresh token TTL | 604800 (7 days) |
Authorizationโ
Guard Stackโ
Every protected endpoint uses a layered guard stack:
| Guard | Purpose |
|---|---|
TenantPermissionGuard | Validates tenant context |
PermissionGuard | Checks user permissions |
OrganizationPermissionGuard | Org-level permission check |
RoleGuard | Role-based access control |
Permission Decoratorsโ
@Permissions(PermissionsEnum.ORG_USERS_VIEW)
@Get('/users')
async findAll() { ... }
Relation Whitelistingโ
All endpoints that accept relations query parameters must use enum-based whitelists to prevent data exposure:
// โ
SAFE: Explicit whitelist
enum AllowedInvoiceRelations {
FROM_ORGANIZATION = 'fromOrganization',
TO_CONTACT = 'toContact',
INVOICE_ITEMS = 'invoiceItems'
}
@Query('relations') relations: AllowedInvoiceRelations[]
// โ UNSAFE: Arbitrary string relations
@Query('relations') relations: string[]
Rate Limitingโ
Configure rate limiting to prevent abuse:
| Variable | Description | Default |
|---|---|---|
THROTTLE_TTL | Window (seconds) | 60 |
THROTTLE_LIMIT | Max requests | 60 |
CORSโ
Configure allowed origins:
CORS_ALLOW_ORIGIN=https://app.example.com,https://admin.example.com
Related Pagesโ
- Tenant Isolation โ data isolation
- Input Validation โ request validation
- Public Endpoint Data Exposure โ public API security