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 的不记名令牌的主要内容,如果未能解决你的问题,请参考以下文章

Nelmio Api Doc Bundle:记录所需参数

Symfony、nelmio/api-doc-bundle 和 @SWG\SecurityScheme

在 Swagger / Zircote / Nelmio-api-doc 中使用外部定义

PHP/Symfony API 的 CORS 问题 Nelmio

PHP / Symfony API Nelmio的CORS问题

是否需要 nelmio_api_doc.yaml 中的架构部分?