@monksdevsp/nest-authorizer
v1.0.6-beta
Published
Authorization service for Neurons on NestJS
Downloads
12
Readme
Installation
npm i -S @monksdevsp/nest-authorizer
⚠️ This is the very first beta version of the Interceptor module for NestJS applications. It's still in test and development stage and not ready for production.
Quick start
In your environment variables you must create the variable that points to your service authorizer. Otherwise you will receive an exception due to the lack of environment variable configuration or if the service url is invalid:
AUTHORIZER_SERVICE=https://your-authorizer-url.com/your-end-point
The interceptor will extract the authorization bearer token
and x-access-token
from the header, or access_token
parameter from the url using passport-jwt and will request the authorization service using the token extracted in the header to validate the token authenticity by the auth service rules:
...
ExtractJwt.fromAuthHeaderAsBearerToken(),
ExtractJwt.fromUrlQueryParameter('access_token'),
ExtractJwt.fromHeader('x-access-token'),
...
Import NeuronsAuthorizerModule
into the root AppModule
or any other module you want. The Authorizer module is a Global module with the @Global()
:
forRoot() configuration
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { NeuronsAuthorizerModule } from '@monksdevsp/nest-authorizer';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot(),
NeuronsAuthorizerModule.forRoot({
authServiceUrl: process.env.AUTHORIZER_SERVICE_URL,
consumer: 'my-service-name',
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
Async configuration
forRootAsync()
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { NeuronsAuthorizerModule } from '@monksdevsp/nest-authorizer';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
NeuronsAuthorizerModule.forRootAsync({
useFactory: async (configService: ConfigService) => ({
authServiceUrl: configService.get('AUTHORIZER_SERVICE_URL'),
consumer: 'my-service-name',
}),
inject: [ConfigService]
})
],
})
export class AppModule {}
Afterward, the Neuron Authorizer will be available to inject on @UserInterceptors() annotation:
import { Controller, Get, UseInterceptors } from '@nestjs/common';
import { AppService } from './app.service';
import { NeuronsAuthorizerInterceptor } from '@monksdevsp/nest-authorizer';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@UseInterceptors(NeuronsAuthorizerInterceptor)
@Get()
getHello(): string {
return this.appService.getHello();
}
}
To make the entire Controller authenticated, just move the interceptor decorator like this:
import { Controller, Get, UseInterceptors } from '@nestjs/common';
import { AppService } from './app.service';
import { NeuronsAuthorizerInterceptor } from '@monksdevsp/nest-authorizer';
@UseInterceptors(NeuronsAuthorizerInterceptor)
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}