web-dev-qa-db-ja.com

NESTJS 'Swagger Explorerへのアクセスに認証を追加することは可能ですか

私は現在私の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でアクセス可能なものが予想されるものです。しかし、私はエクスプローラに認証レイヤを追加することが可能であるかどうか疑問に思いましたので、特定の要求だけが受け入れられます。

私はこのエクスプローラをプロダクションでアクセス可能にしたいが、認証されたユーザのみに。

前もって感謝します :)

14
josec89

同様の課題を持つ人のために、以下に示すように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つの引数(キー名、場所、認証タイプ)を取ります。承認タイプはbasicbearerまたはapikeyにすることができます。

2
Bilyamin Adam

最近の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"
 _
2
pravindot17

この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 {
 _
2
Reza