【问题标题】:Swagger-UI: Add CSRF-Cookie to all requests [duplicate]Swagger-UI:将 CSRF-Cookie 添加到所有请求 [重复]
【发布时间】:2021-06-30 13:13:32
【问题描述】:

我构建了一个使用 CSRF-Cookie 进行身份验证的 API。现在我想用 OpenAPI/Swagger 记录这个 API。

所有路由都受到验证 CSRF-Token 的中间件的保护,/sanctum/csrf-cookie 除外,它用于最初检索 Token。

因此,我需要 Swagger-UI 在每个请求中包含 cookie。我关注了documentation,但它不起作用。

这是我的 Swagger-Definition 的摘录:

security:
  - cookieAuth: []
paths:
  /sanctum/csrf-cookie:
    get:
      operationId: "getApiToken"
      responses:
        '204':
          description: "successful token retrieval"
          headers:
            Set-Cookie:
              schema:
                type: string
  /login:
    post:
      operationId: "loginUser"
      requestBody:
        content:
          application/json:
            schema:
              type: "object"
              properties:
                username:
                  type: string
                password:
                  type: string

components:
  securitySchemes:
    cookieAuth:
      type: apiKey
      in: cookie
      name: XSRF-TOKEN

从我的浏览器网络监视器的屏幕截图中可以看出,login 请求的标头不包含 XSRF-Token。

相比之下,这是我的前端发送的完全相同的请求:

【问题讨论】:

标签: swagger swagger-ui openapi


【解决方案1】:

它应该显示在渲染的 swagger 文档右上角的授权(锁定)图标中。 相反,您可以通过添加

将其添加到每个请求中
  security:
   - api_key: []

阻止每个路由定义。在这种情况下,swagger ui 中请求面板左侧的锁定图标应该显示信息。如果您需要将它们视为标头,请确保使用 parameters 块将其添加到路由中。

【讨论】:

  • 我应该在其中写入哪个值?如果我手动添加从 API 收到的 xsrf-token,则没有任何变化。此外,将安全属性添加到请求或将 in 值更改为 header 或这些措施的任何组合都不起作用。
  • 如果您需要将身份验证仅应用于除所有操作之外的操作子集,那么将安全属性添加到请求是可选的。至于在请求中包含cookie信息请参考swagger.io/docs/specification/describing-parameters/…。这就是我添加到参数部分的意思。
猜你喜欢
  • 2017-09-22
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 2018-03-24
相关资源
最近更新 更多