私は現在私のnestjsプロジェクトでSwaggerを使用しています、そして私はエクスプローラが有効になっています:
main.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',
})
これにより、エクスプローラは/docs
でアクセス可能なものが予想されるものです。しかし、私はエクスプローラに認証レイヤを追加することが可能であるかどうか疑問に思いましたので、特定の要求だけが受け入れられます。
私はこのエクスプローラをプロダクションでアクセス可能にしたいが、認証されたユーザのみに。
前もって感謝します :)
同様の課題を持つ人のために、以下に示すようにNESTJSのSwagger UIに認証を追加できます。
const options = new DocumentBuilder()
.setTitle('Sample Project API')
.setDescription('This is a sample project to demonstrate auth in Swagger UI')
.setVersion('1.0')
.addTag('Nestjs Swagger UI')
.setContactEmail('[email protected]')
.addBearerAuth('Authorization', 'header', 'basic')
.setBasePath('api')
.build();
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup('docs', app, document);
_
そのため、.addbearrauthは3つの引数(キー名、場所、認証タイプ)を取ります。承認タイプはbasic
、bearer
またはapikey
にすることができます。
最近のDocumentBuilder
メソッドの変化に従って、これは私のためにどのように機能しましたか。新しいバージョンを使用している人々の共有。
const options = new DocumentBuilder()
.setTitle('My API')
.setDescription('API used for testing purpose')
.setVersion('1.0.0')
.setBasePath('api')
.addBearerAuth(
{ type: 'http', scheme: 'bearer', bearerFormat: 'JWT' },
'access-token',
)
.build();
const document = SwaggerModule.createDocument(app, options);
_
access-token
はSwagger Docの参照名称です。ヘッダーのトークンは以下のように渡されます。
curl -X GET "http://localhost:3004/test" -H "accept: application/json" -H "Authorization: Bearer test-token"
_
このISはapikeyではなく、ベアラではありません
誰かがこの投稿に着き、apiKey
(ベアラーの代わりに)を探している場合は、これに従う必要があります
main.tsで
const options = new DocumentBuilder()
.setTitle('CMOR')
.setDescription('CMOR API documentation')
.setVersion('1.0')
.addServer('/api')
.addApiKey({
type: 'apiKey', // this should be apiKey
name: 'api-key', // this is the name of the key you expect in header
in: 'header',
}, 'access-key' // this is the name to show and used in swagger
)
.build();
_
それからあなたのコントローラーや方法で
@ApiTags('analyzer')
@ApiSecurity('access-key') // this is the name you set in Document builder
@Controller('analyzer')
export class ScreenAnalyzerController {
_