@edirect/auth
The EDirectInsure Auth Module.
Installation
$ npm i --save @edirect/auth
Usage
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { APP_GUARD } from '@nestjs/core';
import { AuthGuard, AuthMiddleware } from '@edirect/auth';
@Module({
providers: [
{
provide: APP_GUARD,
useFactory: (configService: ConfigService, reflector: Reflector) => new AuthGuard(configService, reflector),
inject: [ConfigService, Reflector]
},
],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer): void {
consumer.apply(AuthMiddleware).forRoutes('cats');
}
}
import { Controller, Get } from '@nestjs/common';
import { Roles, Permissions } from '@edirect/auth';
@Controller('cats')
export class CatsController {
@Get()
@Resources('Default Resource')
@Roles('ROLE_USER')
@Permissions('CATS.READ')
findAll(): Promise<Response> {
return [];
}
}
KEYCLOAK_BASE_URL=http://keycloak-base-url
KEYCLOAK_REALM=keycloak_realm
KEYCLOAK_CLIENT=your-app-client
AUTH_SERVICE_JWKS=https://auth-service-base-url/oidc/jwks
Sample Testing
- Start Keycloak:
docker-compose -f .\keycloak\docker-compose.yml up -d
; - Start Sample project as in the documentation,
- Run the command:
curl --location --request GET 'http://0.0.0.0:3000' \ --header 'Authorization: Bearer eyJhbG...Md2wDw'
;
{
"user": {
"aud": "sample-client",
"exp": 1674548742,
"iat": 1674548442,
"iss": "http://0.0.0.0:8080/realms/main",
"jti": "0fa1627d-ca89-4a08-b2a5-5ab97b21fbbb",
"permissions": [
"offline_access",
"uma_authorization",
"default-roles-main"
],
"roles": [],
"scope": "openid profile email entities phone",
"username": "adailson.moreira@bolttech.io",
"entityUser": {
"email": "adailson.moreira@bolttech.io",
"firstName": "Adailson",
"lastName": "Moreiraa",
"phone": "972367087"
}
},
"rolesToCheck": [
"ROLE_USER"
],
"roleToCheck": "ROLE_USER",
"permissionsToCheck": [
"ENTITY.READ",
"ENTITY.READ_ONLY_OWN"
],
"permissionToCheck": "ENTITY.READ",
"auth": {
"getToken": "eyJhbG...Md2wDw",
"getUser": {
"aud": "sample-client",
"exp": 1674548742,
"iat": 1674548442,
"iss": "http://0.0.0.0:8080/realms/main",
"jti": "0fa1627d-ca89-4a08-b2a5-5ab97b21fbbb",
"permissions": [
"offline_access",
"uma_authorization",
"default-roles-main"
],
"roles": [],
"scope": "openid profile email entities phone",
"username": "adailson.moreira@bolttech.io",
"entityUser": {
"email": "adailson.moreira@bolttech.io",
"firstName": "Adailson",
"lastName": "Moreiraa",
"phone": "972367087"
}
},
"getEntityUser": {
"email": "adailson.moreira@bolttech.io",
"firstName": "Adailson",
"lastName": "Moreiraa",
"phone": "972367087"
},
"hasRoles": false,
"hasRole": false,
"hasPermissions": false,
"hasPermission": false,
"isAdmin": false,
"isUser": false,
"isService": false,
"isCrm": false,
"isBroker": false,
"isAgentLicensed": false,
"isAgentUnlicensed": false
}
}
Note: For this to work, your application must start its bootstrap as nest-app.