@killmenot/nestjs-oauth2-server
TypeScript icon, indicating that this package has built-in type declarations

3.0.1 • Public • Published

Nestjs OAuth2 Server

Nest Logo OAuth2 Logo

npm Coveralls github npm version LICENCE CircleCI build synk vulnerabilities

A Nestjs wrapper module for the oauth2-server package.

This project is a fork of toondaey/nestjs-oauth2-server

Table of content (click to expand)

Installation

Installation is as simple as running:

npm install @killmenot/nestjs-oauth2-server

or

yarn add @killmenot/nestjs-oauth2-server.

Configuration

  1. oauth2-server requires a model to create the server. This can be provided as a service from any part of the application. This should be able to fetch data about clients, users, token, and authorization codes.
import { Injectable } from '@nestjs/common';

@Injectable()
export class OAuth2ModelService implements RequestAuthenticationModel {
    getAccessToken() {
        // ...
    }

    verifyScope() {
        // ...
    }

    // ...
}
  1. Include the module as a dependency in the module where pdf will be generated:

app.module.ts

import { Module } from '@nestjs/common';
import { OAuth2ServerModule } from '@killmenot/nestjs-oauth2-server';
import { OAuth2ModelService } from './oauth2-model.service';


@Module({
    imports: [
        // ... other modules
        OAuth2ServerModule.forRoot({
            model: OAuth2ModelService,
        }),
    ],
})
export class AppModule {}

Usage

The module also provides some nifty decorators to help with configuring the oauth2 handler endpoints. An example controller covering the entire array of decorators is given below

import { Controller } from '@nestjs/common';
import {
    OAuth2Authenticate,
    OAuth2Authorize,
    OAuth2Authorization,
    OAuth2RenewToken,
    OAuth2Token,
} from '@killmenot/nestjs-oauth2-server';

@Controller()
export class ExampleController {
    @Post()
    @OAuth2Authenticate()
    authenticateClient(@OAuth2Token() token: Token) {
        return of(token);
    }

    @OAuth2Authorize()
    @Post()
    authorizeClient(
        @OAuth2Authorization()
        authorization: AuthorizationCode,
    ) {
        return of(authorization);
    }

    @Post()
    @OAuth2RenewToken()
    renewToken(@OAuth2Token() token: Token) {
        return of(token);
    }
}

Async Configuration

The module could also be included asynchronously using the forRootAsync method.

Examples below:

  • Using factory provider approach
import { Module } from '@nestjs/common';
import {
    OAuth2ServerModule,
    IOAuth2ServerModuleOptions,
    OAUTH2_SERVER_MODEL_PROVIDER_TOKEN,
} from '@killmenot/nestjs-oauth2-server';
import { OAuth2ModelService } from './oauth2-model.service';

@Module({
    imports: [
        // ... other modules
        OAuth2ServerModule.forRootAsync({
            useFactory: (): IOAuth2ServerModuleOptions => ({}),
            extraProviders: [
                {
                    provide: OAUTH2_SERVER_MODEL_PROVIDER_TOKEN,
                    useClass: OAuth2ModelService,
                },
            ],
        }),
    ],
})
export class AppModule {}
  • Using class or existing provider approach:

./oauth2-server-config.service.ts

import {
    IOAuth2ServerModuleOptions,
    IOAuth2ServerOptionsFactory,
} from '@killmenot/nestjs-oauth2-server';
import { Injectable } from '@nestjs/common';

@Injectable()
export class OAuth2ServerConfigService implements IOAuth2ServerOptionsFactory {
    createOAuth2ServerOptions(): IOAuth2ServerModuleOptions {
        return {};
    }
}

The OAuth2ServerConfigService SHOULD implement the IOAuth2ServerOptionsFactory, MUST declare the createOAuth2ServerOptions method and MUST return IOAuth2ServerModuleOptions object.

import { Module } from '@nestjs/common';
import { OAuth2ServerModule } from '@killmenot/nestjs-oauth2-server';
import { OAuth2ServerConfigService } from './oauth2-server-config.service.ts';
import { OAuth2ModelService } from './oauth2-model.service';

@Module({
    imports: [
        // ... other modules
        OAuth2ServerModule.forRootAsync({
            useClass: OAuth2ServerConfigService,
            extraProviders: [
                {
                    provide: OAUTH2_SERVER_MODEL_PROVIDER_TOKEN,
                    useClass: OAuth2ModelService,
                },
            ],
        }),
    ],
})
export class AppModule {}

Learnings

The concept of OAuth2 can be further understood in this article here. Also you can head over to the oauth2-server package documentation

Contributing

Suggestions for improvement are welcomed, however, please adhere to the contributing guidelines

Package Sidebar

Install

npm i @killmenot/nestjs-oauth2-server

Weekly Downloads

0

Version

3.0.1

License

MIT

Unpacked Size

69.2 kB

Total Files

53

Last publish

Collaborators

  • alexey