NodeJS+Swagger Autogen OpenAPI3.0:Swagger UI请求缺失Bearer前缀求助
解决Swagger UI提交请求时自动添加Bearer前缀的方法
方法一:修改Swagger Autogen的Security Scheme配置(推荐)
问题根源通常是当前配置的认证类型为apiKey,而非OpenAPI 3.0规范中的http bearer类型,导致Swagger UI不会自动注入Bearer 前缀。直接在Swagger Autogen的文档定义中修改securitySchemes:
const swaggerAutogen = require('swagger-autogen')(); const doc = { info: { title: '你的API文档', version: '1.0.0', }, // 核心修改:配置http类型的bearer认证 components: { securitySchemes: { bearerAuth: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT', // 可选,用于说明Token格式,不影响前缀注入 }, }, }, // 全局启用该认证,所有接口默认携带Authorization头 security: [{ bearerAuth: [] }], }; const outputFile = './swagger-output.json'; const endpointsFiles = ['./app.js']; // 你的路由文件路径 swaggerAutogen(outputFile, endpointsFiles, doc);
配置完成后重新生成Swagger文档,Swagger UI的认证区域会自动识别为Bearer Token类型,输入Token后提交请求时会自动添加Bearer 前缀。
方法二:通过Swagger UI拦截器手动添加前缀
如果无法修改Security Scheme配置,可通过Swagger UI的自定义请求拦截器实现前缀补全。以swagger-ui-express为例:
const express = require('express'); const swaggerUi = require('swagger-ui-express'); const swaggerDocument = require('./swagger-output.json'); const app = express(); // 自定义请求拦截逻辑 const swaggerUiOptions = { customRequestInterceptor: (req) => { // 检查Authorization头是否存在且未携带Bearer前缀 if (req.headers.authorization && !req.headers.authorization.startsWith('Bearer ')) { req.headers.authorization = `Bearer ${req.headers.authorization}`; } return req; }, }; // 挂载Swagger UI并传入自定义配置 app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument, swaggerUiOptions)); app.listen(3000, () => console.log('服务启动'));
方法三:局部接口指定认证规则
如果仅需部分接口启用Bearer认证,可在对应路由的Swagger注释中单独声明:
/** * @swagger * /api/protected: * get: * security: * - bearerAuth: [] * summary: 需要认证的接口 * responses: * 200: * description: 请求成功 */ app.get('/api/protected', (req, res) => { res.send('Protected content'); });
内容的提问来源于stack exchange,提问作者Rohit Sengar
相关产品推荐
相关产品推荐

