Ich verwende derzeit Swagger in meinem NestJS-Projekt und habe den Explorer aktiviert:
inmain.js
const options = new DocumentBuilder()
.setTitle('My App')
.setSchemes('https')
.setDescription('My App API documentation')
.setVersion('1.0')
.build()
const document = SwaggerModule.createDocument(app, options)
SwaggerModule.setup('docs', app, document, {
customSiteTitle: 'My App documentation',
})
Damit ist der Explorer zugänglich /docs
, was ich erwartet hatte. Aber ich habe mich gefragt, ob es möglich ist, dem Explorer eine Authentifizierungsebene hinzuzufügen, sodass nur bestimmte Anforderungen akzeptiert werden.
Ich möchte diesen Explorer in der Produktion zugänglich machen, aber nur für authentifizierte Benutzer.
Danke im Voraus:)
Lösung des Problems
Sichern des Zugriffs auf Ihren Swagger mit HTTP Basic Auth unter Verwendung von NestJS mit Express
Führen Sie zuerst aus npm i express-basic-auth
und fügen Sie Folgendes zu Ihrem hinzu main.{ts,js}
:
// add import
import * as basicAuth from 'express-basic-auth';
//...
// Sometime after NestFactory add this to add HTTP Basic Auth
app.use(
['/docs', '/docs-json'],
basicAuth({
challenge: true,
users: {
yourUserName: 'p4ssw0rd',
},
}),
);
// Your code
const options = new DocumentBuilder()
.setTitle('My App')
.setSchemes('https')
.setDescription('My App API documentation')
.setVersion('1.0')
.build()
const document = SwaggerModule.createDocument(app, options)
SwaggerModule.setup('docs', app, document, {
customSiteTitle: 'My App documentation',
})
//...
Wenn dies eingerichtet ist, werden Sie auf jeder /docs
Route mit einer HTTP Basic Auth-Eingabeaufforderung aufgefordert. Wir müssen auch /docs-json
explizit benennen, um die generierte JSON OpenAPI-Datei zu schützen.
Sie sollten die Anmeldeinformationen nicht in Ihrem Code/Repository ablegen, sondern in Ihrem .env
und über den ConfigService zugreifen.
Ich habe diese Lösung zuerst hier gesehen.
Keine Kommentare:
Kommentar veröffentlichen