Для использования авторизации по API KEY в Swagger из GET запроса в Nest.js, вы можете использовать middleware для аутентификации запросов и проверки валидности API ключей. Ниже приведен пошаговый план, который поможет вам настроить авторизацию по API KEY в Swagger в Nest.js.
Шаг 1: Установите необходимые пакеты
Установите следующие пакеты при помощи npm:
npm install passport passport-http-bearer passport-http-bearer-strategy
Шаг 2: Создайте middleware для аутентификации
Создайте middleware для проверки валидности API ключей и проведения аутентификации запросов. Ниже приведен пример middleware:
//api-key.middleware.ts import { Injectable, NestMiddleware } from '@nestjs/common'; import { Request, Response } from 'express'; import { HttpException } from '@nestjs/common/exceptions/http.exception'; @Injectable() export class ApiKeyMiddleware implements NestMiddleware { private readonly apiKey = 'your-api-key'; use(req: Request, res: Response, next: () => void) { const apiKey = req.header('x-api-key'); if (!apiKey || apiKey !== this.apiKey) { throw new HttpException('Invalid API key', 401); } next(); } }
Шаг 3: Зарегистрируйте middleware в AppModule
Зарегистрируйте middleware в AppModule, чтобы он использовался во всех запросах. Ниже приведен пример регистрации middleware:
//app.module.ts import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { ApiKeyMiddleware } from './api-key.middleware'; @Module({ imports: [], controllers: [AppController], providers: [AppService], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer.apply(ApiKeyMiddleware).forRoutes('*'); } }
Шаг 4: Создайте swagger decorator для API KEY
Создайте декоратор для добавления API KEY в Swagger UI. Ниже приведен пример декоратора:
//swagger.decorator.ts import { applyDecorators, SetMetadata, UseGuards } from '@nestjs/common'; import { ApiBearerAuth } from '@nestjs/swagger'; import { AuthGuard } from '@nestjs/passport'; export function ApiKeyAuth() { return applyDecorators( SetMetadata('apiKey', true), ApiBearerAuth(), UseGuards(AuthGuard('bearer')), ); }
Шаг 5: Используйте декоратор в вашем контроллере
Примените созданный декоратор в вашем контроллере для защиты вызываемых методов. Ниже приведен пример использования декоратора в контроллере:
//app.controller.ts import { Controller, Get } from '@nestjs/common'; import { ApiKeyAuth } from './swagger.decorator'; @Controller('api') @ApiKeyAuth() export class AppController { @Get() getData(): string { return 'Hello World!'; } }
После завершения всех шагов, вы сможете использовать авторизацию по API KEY в Swagger из GET запроса в Nest.js.