Я использую спецификацию openApi 3.0, koa2-swagger-ui и swagger-jsdoc. Я пытаюсь получить кнопку «Авторизовать» на пользовательском интерфейсе swagger, чтобы я мог ввести токен JWT, чтобы мои запросы были авторизованы.
Я следовал документации OpenApi 3.0 для настройки bearerAuth в securitySchemes, а также использовал безопасность, чтобы сделать ее глобальной. Все это было реализовано в моем swagger-config.yaml.
Я хочу иметь возможность авторизоваться на пользовательском интерфейсе swagger и иметь возможность ввести JWT. В настоящее время, когда я нажимаю кнопку авторизации, поле пусто.
пустая авторизация запрос ответа 401 swagger ui
Swagger.json
{
"openapi": "3.0.0",
"info": {
"title": "LMS API Specification",
"version": "1.0.0",
"description": "Open documentation for LMS API"
},
"host": "localhost:8091",
"basePath": "/",
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"bearerFormat": "JWT"
}
}
},
"security": [
{
"bearerAuth": []
}
],
"paths": {
"/instructor/me": {
"get": {
"tags": [
"Instructor"
],
"description": "Finds all classes and their status for the current user",
"responses": {
"200": {
"description": "You have successfully found all classes and their status for the current user"
}
}
}
}
},
"tags": []
}
чванство-config.yaml
openapi: 3.0.0
info:
title: LMS API Specification
version: 1.0.0
description: Open documentation for LMS API
host: localhost:8091
basePath: /
apis: ['api/v1/instructor/index.js']
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
security:
- bearerAuth: []
app.js
import Koa from 'koa'
import cors from 'koa-cors'
import serveStatic from 'koa-static'
// import websockify from 'koa-websocket'
import Logger from './lib/Logger'
import authInit from './auth'
import index from './routes/index'
import auth from './routes/auth'
import launch from './routes/launch'
import lesson from './routes/lesson'
import v1 from './api/v1'
import Router from 'koa-router'
export default async port => {
const koaSwagger = require('koa2-swagger-ui');
// const app = websockify(new Koa
const app = new Koa()
const swaggerJSDoc = require('swagger-jsdoc');
var router = new Router()
await authInit(app)
// Definitions for the swagger docs
const swaggerDefinition = {
info: {
// API informations (required)
title: 'LMS API Specification', // Title (required)
version: '1.0.0', // Version (required)
description: 'OpenAPI documentation for LMS', // Description (optional)
},
host: `localhost:8091/api/v1`, // Host (optional)
basePath: '/', // Base path (optional)
};
const options = {
// Import swaggerDefinitions
swaggerDefinition,
// Path to the API docs
// Note that this path is relative to the current directory from which the Node.js is ran, not the application itself.
apis: ['api/v1/instructor/index.js'],
};
// Initialize swagger-jsdoc -> returns validated swagger spec in json format
const swaggerSpec = swaggerJSDoc(options);
router.get('/swagger.json', async (ctx, next) => {
ctx.set('Content-Type', 'application/json')
ctx.body = (swaggerSpec);
return
});
app.use(
koaSwagger({
swaggerOptions: {
url: 'http://localhost:8091/swagger.json', // example path to json
},
hideTopbar: true,
routePrefix: '/docs', // route where the view is returned
}),
);
Logger.info(`Running in ${process.env.NODE_ENV} environment`)
app
.use(cors())
.use(serveStatic(__dirname + '/assets'))
.use(index.routes())
.use(auth.routes())
.use(launch.routes())
.use(lesson.routes())
.use(v1.routes())
.use(router.routes())
return app.listen(port, () => {
Logger.info(`> Ready on port ${port}`)
})
}