Nelmio API 文档区域和带有 symfony 4 的不记名令牌
Posted
技术标签:
【中文标题】Nelmio API 文档区域和带有 symfony 4 的不记名令牌【英文标题】:Nelmio API doc area and bearer token with symfony 4 【发布时间】:2020-05-05 21:30:52 【问题描述】:我在 Symfony 4 中有 API。我将 NelmioApiDocBundle 添加到我的项目中,但我的文档有问题。这是我的配置: 包\nelmio_api_doc.yaml
nelmio_api_doc:
documentation:
# schemes: [http, https]
info:
title: Symfony JWT API
description: Symfony JWT API docs
version: 1.0.0
securityDefinitions:
Bearer:
type: apiKey
description: 'Authorization: Bearer jwt'
name: Authorization
in: header
security:
- Bearer: []
areas: # to filter documented areas
default:
path_patterns:
- ^/api(?!/doc$) # Accepts routes under /api except /api/doc
config\routes.yaml
# Expose your documentation as JSON swagger compliant
app.swagger_ui:
path: /api/doc
methods: GET
defaults: _controller: nelmio_api_doc.controller.swagger_ui
这是我招摇的 ui 屏幕:
我有控制器:SpeakerController、HomeController,我怎样才能让每个控制器成为一个单独的区域,而其余的则默认?即Speaker区域中的SpeakerController,Home区域中的HomeController等..
我的下一个问题是我有一个受不记名令牌保护的 API,当我在招摇中单击授权时,我将添加当前的 jwt 令牌并且我想请求它,作为响应我得到:
"code": 401,
"message": "JWT Token not found"
在邮递员中我没有问题:
【问题讨论】:
写入不记名令牌问题 - 当您在 Swagger UI 中输入令牌时,您是否在其前面加上Bearer
?
@Helen 是的,我添加了前缀 Bearer
【参考方案1】:
你需要用标签来注释你的控制器:
@SWG\Tag(name="Speaker")
见: https://symfony.com/doc/current/bundles/NelmioApiDocBundle/index.html#using-the-bundle
【讨论】:
效果很好,但我的不记名令牌有问题,我添加了好的令牌,但是当我请求时出现错误“未找到 JWT 令牌” @PawelC 你用@Security(name="Bearer")
注释你的控制器吗【参考方案2】:
您必须发送带有前缀的 apiKey 值
承载者
【讨论】:
嗨 :) 你的回答解决了我的问题。我忘了在开始时添加 Bearer,我只输入了令牌。 您也可以在配置中更改或删除此前缀以上是关于Nelmio API 文档区域和带有 symfony 4 的不记名令牌的主要内容,如果未能解决你的问题,请参考以下文章
Symfony、nelmio/api-doc-bundle 和 @SWG\SecurityScheme
在 Swagger / Zircote / Nelmio-api-doc 中使用外部定义
PHP/Symfony API 的 CORS 问题 Nelmio