微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 NelmioApiDocBundle 中向 Swagger 添加身份验证文档

如何解决在 NelmioApiDocBundle 中向 Swagger 添加身份验证文档

我将 Symfony (5) 与 NelmioApiDocBundle (4.0) 和 LexikJWTAuthenticationBundle 一起使用,以使用 Swagger 创建 API。 我已经设置了端点和身份验证,一切都按预期工作。 我有带身份验证的功能齐全的 API,有一个文档,我可以成功生成 Open API 规范。 规范中缺少一件事:“身份验证端点”,我找不到将其添加生成的规范和文档中的方法(除了覆盖整个身份验证)

因为我使用的是 Symfony 安全层和防火墙,并且它与 LexikJWTAuthenticationBundle 集成在一起,所以没有地方设置 Swagger 注释,而且看起来 bundle 本身不能处理生成“安全部分” 前段时间我使用了一个 ApiPlatform,在那里它是由一个“装饰者”完成的

任何人都知道有没有办法(注释?)生成文档的安全部分,或者我是否必须从头开始创建身份验证保护(?)

解决方法

没关系。我发布它的一分钟我找到了一个解决方案。 在 packages/nelmio_bundle_api.yaml 中,您可以配置不是由注释创建的附加文档(swagger 规范)。 基本上,您必须添加一个指向您的身份验证路由的新路径(在我的情况下为 /api/login_check)并在“组件”部分中定义 Credential 和 Token 对象。

所以有了 symfony 授权就可以了(这只是 yaml 文件的安全部分):

nelmio_api_doc:
    documentation:
        paths:
            /api/login_check:
                post:
                    tags:
                        - Token
                    operationId: postCredentialsItem
                    summary: Get JWT token to login.
                    requestBody:
                        description: Create new JWT Token
                        content:
                            application/json:
                                schema:
                                    $ref: '#/components/schemas/Credentials'
                    responses:
                        '200':
                            description: Get JWT token
                            content:
                                application/json:
                                    schema:
                                        $ref: '#/components/schemas/Token'
    components:
        schemas:
            Token:
                type: object
                properties:
                    token:
                        type: string
                        readOnly: true
            Credentials:
                type: object
                properties:
                    username:
                        type: string
                    password:
                        type: string
        securitySchemes:
            bearerAuth:            
                type: apiKey
                scheme: bearer
                bearerFormat: JWT   
    security:
        - bearerAuth: []

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。