nestjs-oauth2-library
v0.1.4
Published
nestjs-oauth2-library es una librería que proporciona una solución sencilla y flexible para la autenticación OAuth2 en aplicaciones NestJS. Esta librería está diseñada para facilitar la integración con servidores de identidad que soportan el flujo de cont
Downloads
16
Readme
nestjs-oauth2-library
nestjs-oauth2-library es una librería que proporciona una solución sencilla y flexible para la autenticación OAuth2 en aplicaciones NestJS. Esta librería está diseñada para facilitar la integración con servidores de identidad que soportan el flujo de contraseña (password grant type).
Instalación
Para instalar la librería, usa npm o yarn:
npm install nestjs-oauth2-library
Configuración
Paso 1: Configurar las Variables de Entorno Crea un archivo .env en el directorio raíz de tu aplicación con las siguientes configuraciones Si deseas utilizar validación por usuario y contraseña:
OAUTH2_BASIC_USER=user
OAUTH2_BASIC_PASSWORD=password
OAUTH2_TOKEN_URL=https://localhost:9443/oauth2/token
OAUTH2_AUTH_BASIC=true
OAUTH2_INTROSPECTION_URL=https://localhost:9443/oauth2/introspect
OAUTH2_USERINFO_URL=https://localhost:9443/oauth2/userinfo
o utilizas validación por client credentials:
OAUTH2_TOKEN_URL=https://localhost:9443/oauth2/token
OAUTH2_CLIENT_ID=client_id
OAUTH2_CLIENT_SECRET=client_secret
OAUTH2_INTROSPECTION_URL=https://localhost:9443/oauth2/introspect
OAUTH2_USERINFO_URL=https://localhost:9443/oauth2/userinfo
Paso 2: Importar y Configurar el Módulo en tu Aplicación En tu módulo principal (AppModule), importa y configura ConfigModule y AuthModule Si utilizas validación por usuario y contraseña
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { OAuth2Module } from 'nestjs-oauth2-library';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
}),
OAuth2Module.register({
tokenUrl: process.env.OAUTH2_TOKEN_URL,
authBasic: process.env.OAUTH2_AUTH_BASIC,
userBasic: process.env.OAUTH2_BASIC_USER,
passwordBasic: process.env.OAUTH2_BASIC_PASSWORD
introspectionUrl: process.env.OAUTH2_INTROSPECTION_URL,
}),
],
})
export class AppModule {}
o validación por client credentials
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { OAuth2Module } from 'nestjs-oauth2-library';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
}),
OAuth2Module.register({
tokenUrl: process.env.OAUTH2_TOKEN_URL,
clientId: process.env.OAUTH2_CLIENT_ID,
clientSecret: process.env.OAUTH2_CLIENT_SECRET,
introspectionUrl: process.env.OAUTH2_INTROSPECTION_URL,
}),
],
})
export class AppModule {}
Paso 3: Usar los Guards en tus Controladores Para proteger tus endpoints, usa los guards proporcionados por la librería en tus controladores:
import { Controller, Get, UseGuards } from '@nestjs/common';
import { OAuth2AuthGuard, OAuth2ScopesGuard, Scopes } from 'nestjs-oauth2-library';
import { ApiOAuth2 } from '@nestjs/swagger';
@Controller('secure')
export class AppController {
@Get()
@UseGuards(OAuth2AuthGuard, OAuth2ScopesGuard)
@Scopes('my_scope')
@ApiOAuth2(['my_scope'])
getSecureData() {
return { message: 'This is a secure endpoint' };
}
}
Opcional: Para obtener datos del usuario mediante el token asegurarse de agregar la url de userInfo en OAUTH2_USERINFO_URL:
import { Controller, Get, UseGuards } from '@nestjs/common';
import { OAuth2AuthGuard, OAuth2ScopesGuard, Scopes, OAuth2Strategy } from 'nestjs-oauth2-library';
import { ApiOAuth2 } from '@nestjs/swagger';
@Controller('secure')
export class AppController {
constructor(
private readonly oauth2Strategy: OAuth2Strategy
) {}
@Get()
@UseGuards(OAuth2AuthGuard, OAuth2ScopesGuard)
@Scopes('my_scope')
@ApiOAuth2(['my_scope'])
getSecureData(@Req() request: Request) {
const token = request.headers.authorization?.split(' ')[1];
if (!token) {
throw new UnauthorizedException('Token is missing');
}
const userInfo = await this.oauth2Strategy.getUserInfo(token);
return { message: 'This is a secure endpoint' };
}
}
Licencia
Este proyecto está licenciado bajo la licencia MIT.