@gaucho/nest-keycloak
TypeScript icon, indicating that this package has built-in type declarations

0.0.19 • Public • Published

@gaucho/nest-keycloak

Integrate keycloak with Nest controllers and manage keycloak with the admin module

KeycloakModule

This module provide decorators to intercept keycloak tokens

$ npm i --save @gaucho/nest-keycloak keycloak-connect
// session.ts
import * as expressSession from 'express-session';

// DON'T use this in PRODUCTION
const memoryStore = new expressSession.MemoryStore();

export const session = expressSession({
  secret: 'mySecret',
  resave: false,
  saveUninitialized: true,
  store: memoryStore
})
// main.ts
app.use(session);
// app.module.ts
import { KeycloakModule } from '@gaucho/nest-keycloak';
import { session } from './session';

@Module({
  imports: [
    KeycloakModule.forRoot({
      serverUrl: 'http://localhost:8080/auth',
      realm: 'master',
      clientId: 'admin-cli',
      session
    }),
  ],
  controllers: [SecureController]
})
export class AppModule{}
// secure.controller.ts
import { Authenticated, User, KeycloakUser } from '@gaucho/nest-keycloak';
import { Controller, Get, Post, Put, Delete } from '@nestjs/common';

@Controller()
export class SecureController {

  @Get()
  find(@User() user: KeycloakUser) {
    // if the keycloak token is present user will be a valid keycloak user
    // if not user.isAnonymous() => true
  }

  @Post()
  @Authenticated()
  create(@User() user: KeycloakUser) {
    // Get here if is a valid authentication
  }

  @Put()
  @Authenticated('admin')
  update(@User() user: KeycloakUser) {
    // Get here if is admin
  }


  @Delete()
  @Authenticated('admin', 'superadmin')
  update(@User() user: KeycloakUser) {
    // Get here if is admin or superadmin
  }

}

@Controller()
@Authenticated('admin')
export class AdminController {

  @Put()
  update(@User() user: KeycloakUser) {
    // Get here if is admin
  }


  @Delete()
  @Authenticated('guest') // Override
  update(@User() user: KeycloakUser) {
    // Get here if is guest
  }

}

KeycloakAdminModule

$ npm i --save @gaucho/nest-keycloak keycloak-admin

This module provide an interface to work with 'keycloak-admin'

// app.module.ts
import { KeycloakAdminModule } from '@gaucho/nest-keycloak/admin';

@Module({
  imports: [
    KeycloakAdminModule.forRoot({
      serverUrl: 'http://localhost:8080/auth',
      realm: 'master',
      adminPwd: process.env.KEYCLOAK_ADMIN_PASSWORD
    }),
  ],
  providers: [UsersService]
})
export class AppModule{}
// users.service.ts
import { Module, Injectable } from '@nestjs/common';
import KeycloakAdminService from '@gaucho/nest-keycloak/admin';
import KcAdminClient from 'keycloak-admin';

@Injectable()
export class UsersService {

  constructor(keycloak: KeycloakAdminService) {}

  getUsers(): Promise<any> {
    const client: KcAdminClient = await service.client();
    return client.users.find();
  }

}

Keyclaok admin adapter

import { KeycloakConfigAdapter } from "@gaucho/nest-keycloak";
import { KeycloakAdminAdapter } from "@gaucho/nest-keycloak/admin";
import KcAdminClient from 'keycloak-admin';

const cadapter = new KeycloakConfigAdapter({
  serverUrl: 'http://localhost:8080/auth',
  adminPwd: 'admin'
});

const config = await cadapter.resolve();
const adapter = new KeycloakAdminAdapter(config);
const client = await adapter.client();

Readme

Keywords

none

Package Sidebar

Install

npm i @gaucho/nest-keycloak

Weekly Downloads

1

Version

0.0.19

License

none

Unpacked Size

48.8 kB

Total Files

67

Last publish

Collaborators

  • delmosaurio