nestjs swagger 是不是支持 cookie 身份验证?

Posted

技术标签:

【中文标题】nestjs swagger 是不是支持 cookie 身份验证?【英文标题】:Is cookie authentication supported in nestjs swagger?nestjs swagger 是否支持 cookie 身份验证? 【发布时间】:2021-01-29 08:34:32 【问题描述】:

我想在我的 swagger 文档中包含 cookie 授权,但是我似乎没有取得任何进展。

根据https://docs.nestjs.com/openapi/security,nestjs-swagger 似乎支持 cookie 身份验证。

但是,根据 Swagger UI 和编辑器的 https://swagger.io/docs/specification/authentication/cookie-authentication/,“试用”不支持 cookie 身份验证

我不确定我是否错误地实现了 cookie 身份验证,或者它是否不受支持。

下面是我正在尝试的实现。

在 DocumentBuilder() 中:

.addCookieAuth('authCookie')

在控制器中:

@ApiCookieAuth()

我尝试将我的 cookie 名称“authCookie”添加到 @ApiCookieAuth() 标记中。 我也尝试过使用.addCookieAuth('authCookie', type: 'apiKey',in: 'cookie')

我尝试任何方式都会收到未找到 JWT 令牌的错误。我知道当我使用邮递员时这确实有效,所以我很困惑为什么会遇到这个问题。

【问题讨论】:

【参考方案1】:

基本上,你可以使用

  SwaggerModule.setup('swagger', app, document, 
    swaggerOptions: 
      requestInterceptor: (req) => 
        req.credentials = 'include';
        return req;
      ,
    ,
  );

请注意,手动设置 cookie 值不会对 Fetch 请求产生任何影响。

swagger-client有关,与NestJs无关

【讨论】:

【参考方案2】:

我的一个解决办法是在DocumentBuilder 中使用这样的options

.addCookieAuth('authCookie', 
  type: 'http',
  in: 'Header',
  scheme: 'Bearer'
)

以及控制器中的这样的装饰器:

@ApiCookieAuth()

如果您需要指定 cookie 名称,有一个 securityName 参数将指定 cookie 应用内的名称

.addCookieAuth(cookieName?: string, options?: SecuritySchemeObject, securityName?: string)

在您指定 securityName 之后,您还需要将其提供给控制器装饰器:

DocumentBuilder

.addCookieAuth('auth-cookie', 
  type: 'http',
  in: 'Header',
  scheme: 'Bearer'
,
'in-app-cookie-name')

在控制器中:

@ApiCookieAuth('in-app-cookie-name')

此解决方案在手动将 JWT 插入到 swagger auth 输入后才起作用。如果我做对了 - SwaggerUI 不支持自动插入 cookie 字段。

link with this issue on GitHub

【讨论】:

以上是关于nestjs swagger 是不是支持 cookie 身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

@nestjs/swagger:是不是可以防止网络钓鱼?

如何在 Nx monorepo 中为 NestJS 和 Angular 之间共享的 API 接口启用 Swagger?

NestJS/swagger:ApiExtraModel 期望啥模型作为参数?

@nestjs/swagger 没有设置授权标头

@nestjs/swagger:如何添加 API URL?

NRWL + NestJS 尝试使用 Swagger 插件