如何通过JWT自动请求简化Swagger身份验证流程
完全可以实现,不需要额外引入第三方工具,目前常用两种实现方案:
方案1:OpenAPI 3.0+ 原生OAuth2密码流配置(推荐)
这是成本最低的方案,只要在你的OpenAPI定义文件中新增对应安全配置即可,配置完成后Swagger UI原生的「Authorize」按钮点击后会自动弹出用户名、密码输入框,用户填写后点击授权,Swagger会自动调用你指定的token接口获取JWT,后续会话内所有请求会自动挂载Authorization: Bearer <token>请求头,完全匹配你提到的需求。
参考配置(YAML格式OpenAPI定义):
components: securitySchemes: bearerAuth: type: oauth2 flows: password: tokenUrl: /你的获取token的接口路径 # 例如 /api/user/login scopes: {} # 接口没有权限scope要求就留空 security: - bearerAuth: []
配置完成后刷新Swagger UI即可生效,不需要修改其他业务代码。
方案2:自定义逻辑适配非标准token接口
如果你的token返回结构不符合OAuth2标准(比如token字段名不是access_token、登录需要传额外自定义参数),可以通过Swagger UI的自定义配置实现:
- 你可以在Swagger UI初始化代码中插入自定义的用户名、密码输入组件,监听用户提交事件,调用你的登录接口拿到token后存储到浏览器localStorage的
swagger_accessToken字段中,Swagger UI会自动读取该字段作为全局token挂载到所有请求 - 也可以通过
requestInterceptor配置项统一处理请求头,示例初始化代码:
SwaggerUIBundle({ url: "/openapi.json", dom_id: '#swagger-ui', // 全局请求拦截器 requestInterceptor: (req) => { const customToken = localStorage.getItem('自定义存储token的key') if (customToken) { req.headers.Authorization = `Bearer ${customToken}` } return req } })
如果你用的是SpringDoc、FastAPI、NestJS这类封装了Swagger的开发框架,不需要手动编写原生OpenAPI配置,框架都提供了对应的
SecurityScheme配置注解,直接配置oauth2密码流参数即可,逻辑和原生配置完全一致。
内容的提问来源于stack exchange,提问作者ParaSwarm
相关产品推荐
相关产品推荐

