A comprehensive authentication and authorization package built on top of Keycloak, providing a unified API for user management, authentication, and role-based access control across multiple clients and applications.
This package implements a multi-tenant authentication system that bridges Keycloak's identity management capabilities with a local MongoDB database for enhanced user data management and client-specific configurations.
- LazyAuth: Main orchestrator class that manages the entire authentication lifecycle
- Realm Management: Dynamic realm creation and configuration for different clients
- User Management: Comprehensive user registration, login, and profile management
- Keycloak Integration: Seamless integration with Keycloak Admin API and public client APIs
- Multi-Client Support: Support for multiple authentication clients with different configurations
- Multi-method Authentication: Username, email, or phone number based login
- Flexible Registration: Configurable registration flows per client
- Token Management: JWT access and refresh token handling
- Password Management: Secure password updates and validation
- Role-Based Access Control (RBAC): Hierarchical role management
- Group Management: User grouping with inherited permissions
- Client-Specific Permissions: Isolated permission systems per client
- Token Validation: Comprehensive access token and role validation
- Client Isolation: Separate authentication flows per client
- Custom Attributes: Client-specific user attributes
- Shared Attributes: Cross-client user data sharing
- Flexible Configuration: Per-client authentication settings
@keycloak/keycloak-admin-client: Keycloak administration@lazy-js/error-guard: Centralized error handling@lazy-js/server: Express.js server framework@lazy-js/utils: Utility functionsjose: JWT token handlingmongoose: MongoDB object modeling
typescript: TypeScript compilationvitest: Testing frameworksupertest: HTTP testing utilities
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Client Apps β β LazyAuth β β Keycloak β
β βββββΊβ Package βββββΊβ Server β
β - Web Apps β β β β β
β - Mobile Apps β β - User Mgmt β β - Identity Mgmt β
β - APIs β β - Auth Flow β β - Token Issuanceβ
βββββββββββββββββββ β - Role Mgmt β β - User Storage β
βββββββββββββββββββ βββββββββββββββββββ
β
βΌ
βββββββββββββββββββ
β MongoDB β
β β
β - User Profiles β
β - Client Config β
β - Custom Data β
βββββββββββββββββββ
src/
βββ modules/
β βββ kcApi/ # Keycloak API integration
β β βββ services/ # Admin and public client APIs
β β βββ types/ # API type definitions
β βββ Realm/ # Realm and client management
β β βββ src/ # Core realm classes
β β βββ types/ # Realm type definitions
β βββ RealmBuilder/ # Dynamic realm creation
β βββ RealmManipulator/# Realm operations
β βββ User/ # User management
β βββ controller/ # HTTP endpoints
β βββ service/ # Business logic
β βββ model/ # Data models
β βββ repository/ # Data access
β βββ validator/ # Input validation
βββ database/ # Database connection
βββ utils/ # Utility functions
βββ types/ # Global type definitions
npm install @lazy-js/authimport { LazyAuth, Realm, Client, Group, User, createRolesTree } from '@lazy-js/auth';
// Define roles hierarchy
const roles = createRolesTree([
{
name: 'admin',
childRoles: [{ name: 'user-management' }, { name: 'content-management' }],
},
]);
// Create groups
const adminGroup = new Group('admin-group', true).addRoles(roles).addAttribute('permissions', 'all');
// Create client configuration
const client = new Client('my-app', 'my-app-client')
.setAuthConfig(
new ClientAuthConfig(['email', 'username'])
.setRegisterConfig({ status: 'public', verified: false })
.setLoginConfig({ status: 'enabled' }),
)
.addGroup(adminGroup);
// Create realm
const realm = new Realm('my-realm').addClient(client).addUser(
new User({
username: 'admin',
password: 'secure-password',
method: 'username',
group: adminGroup,
}),
);
// Initialize LazyAuth
const auth = new LazyAuth(
{
keycloakServiceUrl: 'http://localhost:8080',
keycloakAdminPassword: 'admin-password',
localMongoDbURL: 'mongodb://localhost:27017/auth-db',
logKeycloakInfo: true,
},
{
config: {
port: 3000,
serviceName: 'auth-service',
routerPrefix: '/api/v1',
},
},
realm,
notificationSdk,
);
// Start the service
await auth.start();The package automatically exposes the following endpoints for each configured client:
POST /{client-name}/register- User registrationPOST /{client-name}/login- User loginPOST /{client-name}/validate-access-token- Token validationPOST /{client-name}/validate-role- Role validationPOST /{client-name}/refresh-access-token- Token refresh
PUT /{client-name}/me/password- Update passwordPUT /{client-name}/me/verify- Verify user account
- JWT Token Management: Secure token generation and validation
- Password Hashing: Bcrypt-based password security
- Multi-Factor Support: Email/phone verification capabilities
- Session Management: Automatic token refresh and expiration
- Role-Based Access: Hierarchical permission system
- Client Isolation: Separate permission contexts per client
- Token Validation: Comprehensive token integrity checks
- Input Validation: Zod-based request validation
- Encrypted Storage: Sensitive data encryption in MongoDB
- Secure Communication: HTTPS-ready API endpoints
- Error Handling: Secure error responses without data leakage
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverageThe package includes comprehensive logging for:
- Authentication events
- Authorization decisions
- Database operations
- Keycloak API interactions
- Error tracking and debugging
The system uses a centralized error handling approach with:
- Validation Errors: Input validation failures
- Authentication Errors: Login/registration failures
- Authorization Errors: Permission denied scenarios
- System Errors: Infrastructure and service failures
- Connection Pooling: Optimized database connections
- Token Caching: Efficient token validation
- Async Operations: Non-blocking I/O throughout
- Memory Management: Efficient resource utilization
- Horizontal Scaling: Stateless design supports multiple instances
- Database Sharding: MongoDB sharding support
- Load Balancing: Ready for load balancer deployment
- Microservice Ready: Designed for microservice architectures
KEYCLOAK_SERVICE_URL: Keycloak server URLKEYCLOAK_ADMIN_PASSWORD: Admin passwordMONGODB_URL: MongoDB connection stringSERVICE_PORT: API server portSERVICE_NAME: Service identifier
Each client can be configured with:
- Primary authentication fields (email, username, phone)
- Registration policies (public/private, verification requirements)
- Login policies (enabled/disabled)
- Custom user attributes
- Group and role assignments
ISC License - see LICENSE file for details.