Skip to content

toondaey/nestjs-oauth2-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

84 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Table of content (click to expand)

Installation

Installation is as simple as running:

npm install @t00nday/nestjs-oauth2-server

or

yarn add @t00nday/nestjs-oauth2-server.

Configuration

  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 '@t00nday/nestjs-oauth2-server';

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

In addition to the above the, 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. This MUST be a service decorated with the OAuth2Model decorator.

import { OAuth2Model } from '@t00nday/nestjs-oauth2-server';

@OAuth2Model()
export class OAuth2ModelService
    implements RequestAuthenticationModel {
    getAccessToken() {}

    verifyScope() {}
    // ...
}

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 {} from '@t00nday/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,
} from '@t00nday/nestjs-oauth2-server';

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

./oauth2-server-config.service.ts

import {
    IOAuth2ServerModuleOptions,
    IOAuth2ServerOptionsFactory,
} from '@t00nday/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 '@t00nday/nestjs-oauth2-server';
import { OAuth2ServerConfigService } from './oauth2-server-config.service.ts';

@Module({
    imports: [
        // ... other modules
        OAuth2ServerModule.forRootAsync({
            useClass: OAuth2ServerConfigService,
        }),
    ],
})
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