iammmmmm
v0.0.1
Published
The OXINUS IAM Module is a npm package designed to streamline JWT validation, HMAC authentication, authorization guards, and policy handlers for routes in your application. This module automatically validates tokens and HMAC authentication and authorizes
Downloads
66
Readme
OXINUS IAM Module
The OXINUS IAM Module is a npm package designed to streamline JWT validation, HMAC authentication, authorization guards, and policy handlers for routes in your application. This module automatically validates tokens and HMAC authentication and authorizes policies based on token information for any routes.
Installation
To install the IAM Module, use npm:
npm install @oxinus-io/iam
Usage
App Module Configuration
After installing the package, import it into your app.module.ts
and configure it using IamModule.forRoot
with a ConfigService
instance:
import { Module } from '@nestjs/common';
import { IamModule } from '@oxinus-io/iam';
import { ConfigService } from '@nestjs/config';
@Module({
imports: [
IamModule.forRoot(new ConfigService())
],
})
export class AppModule {}
Feature Module Configuration
In your feature modules, you can import JWT or HMAC guards as needed:
import { Module } from '@nestjs/common';
import { JwtAuthGuard, HmacMiddleware } from '@oxinus-io/iam';
@Module({
providers: [JwtAuthGuard, HmacMiddleware],
})
export class FeatureModule {}
Controller and Method Level Guards
To use guards at the controller or method level, utilize the @UseGuards
decorator:
import { Controller, Get, UseGuards } from '@nestjs/common';
import { AuthGuard, PoliciesGuard } from '@oxinus-io/iam';
@Controller('example')
export class ExampleController {
@Get()
@UseGuards(AuthGuard, PoliciesGuard)
findAll() {
// Your logic here
}
}
Policy Checking
To check policies at the method level, use the @CheckPolicies
decorator. The first parameter is the scope, the second is the action, and the last optional parameter is the specific parameter:
import { Controller, Get, Param } from '@nestjs/common';
import { CheckPolicies } from '@oxinus-io/iam';
@Controller('users')
export class UserController {
@Get(':id')
@CheckPolicies(new PolicyHandler('User', 'getOne', 'id'))
findOne(@Param('id') id: string) {
// Your logic here
}
}
Google Cloud Pub/Sub Publisher
Installation
Import and configure the module in your app.module.ts:
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { PubSubSubscriberModule } from '@oxinus-io/iam';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
}),
PublisherModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
projectId: configService.get<string>('GOOGLE_CLOUD_PROJECT_ID'),
defaultTopic: configService.get<string>('PUBSUB_TOPIC_NAME'),
credentials: JSON.parse(
configService.get<string>('GOOGLE_AUTH_CREDENTIALS'),
),
}),
inject: [ConfigService],
}),
],
})
export class AppModule {}
You can now publish events using the EventEmitter
service:
import { Injectable } from '@nestjs/common';
@Injectable()
export class UsersService {
constructor(private readonly publisherService: PublisherService) {}
async handleUserCreated(userData: any) {
await this.publisherService.publish('USER_CREATED', { userData });
// Handle user creation event
}
}
Google Cloud Pub/Sub Subscriber
Installation
Import and configure the module in your app.module.ts:
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { PubSubSubscriberModule } from '@oxinus-io/iam';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
}),
PubSubSubscriberModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
projectId: configService.get<string>('GOOGLE_CLOUD_PROJECT_ID'),
keyFilename: configService.get<string>('GOOGLE_CLOUD_KEY_FILE'),
topicName: configService.get<string>('PUBSUB_TOPIC_NAME'),
subscriptionPrefix: configService.get<string>('PUBSUB_SUBSCRIPTION_PREFIX'),
}),
}),
],
})
export class AppModule {}
Create event handlers in your services:
import { Injectable } from '@nestjs/common';
import { OnEvent } from '@nestjs/event-emitter';
@Injectable()
export class UsersSyncService {
@OnEvent('USER_CREATED')
handleUserCreated(userData: any) {
console.log('New user created:', userData);
// Handle user creation event
}
}
Summary
The OXINUS IAM Module provides a comprehensive solution for JWT validation, HMAC authentication, authorization guards, and policy handling. By following the configuration steps, you can ensure secure and organized access control in your application.