springdoc-openapi swagger-ui 中的 CSRF 支持
CSRF Support in springdoc-openapi swagger-ui
当使用与 springdoc-openapi 捆绑在一起的请求时,有没有一种方法可以自动将 CSRF header 包含到来自 swagger ui 的请求中?
似乎在 springfox (GitHub) 中实现了类似的解决方案,但我没有找到关于是否可以通过 springdoc-openapi 实现的信息。
如果您使用标准 headers,则默认支持 CSRF 令牌。(例如使用 spring-security headers)
如果需要 CSRF 令牌,swagger-ui 会在每个 HTTP REQUEST 期间自动发送新的 XSRF-TOKEN。
就是说 - 如果您的 XSRF-TOKEN 不是 standards-based,您可以使用 requestInterceptor 通过 spring 资源转换器以编程方式手动捕获并附加最新的 xsrf 令牌到请求:
- https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/configuration.md#requestinterceptor
此外,随着浏览器添加 user-agent 级支持以控制 cross-origin 请求 cookie 包含,CSRF 正在变成 less relevant over time。
从 springdoc-openapi 的 v1.4.4 版本开始,添加了一个新的 属性 以启用 CSRF 支持,同时使用标准 header 名称:
springdoc.swagger-ui.csrf.enabled=true
SwaggerUI 默认不包含 CSRF-TOKEN 到请求中
如果您使用的是 React,则可以重新使用以下代码手动包含它:
import React from 'react';
import SwaggerUI from "swagger-ui-react"
import "swagger-ui-react/swagger-ui.css"
import Cookies from 'universal-cookie';
const cookies = new Cookies();
const DocsPage = () => (
<SwaggerUI url="/v2/api-docs" requestInterceptor={(request) => {
request.headers['X-XSRF-TOKEN'] = cookies.get("XSRF-TOKEN")
}}/>
);
export default DocsPage;
当使用与 springdoc-openapi 捆绑在一起的请求时,有没有一种方法可以自动将 CSRF header 包含到来自 swagger ui 的请求中?
似乎在 springfox (GitHub) 中实现了类似的解决方案,但我没有找到关于是否可以通过 springdoc-openapi 实现的信息。
如果您使用标准 headers,则默认支持 CSRF 令牌。(例如使用 spring-security headers)
如果需要 CSRF 令牌,swagger-ui 会在每个 HTTP REQUEST 期间自动发送新的 XSRF-TOKEN。
就是说 - 如果您的 XSRF-TOKEN 不是 standards-based,您可以使用 requestInterceptor 通过 spring 资源转换器以编程方式手动捕获并附加最新的 xsrf 令牌到请求:
- https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/configuration.md#requestinterceptor
此外,随着浏览器添加 user-agent 级支持以控制 cross-origin 请求 cookie 包含,CSRF 正在变成 less relevant over time。
从 springdoc-openapi 的 v1.4.4 版本开始,添加了一个新的 属性 以启用 CSRF 支持,同时使用标准 header 名称:
springdoc.swagger-ui.csrf.enabled=true
SwaggerUI 默认不包含 CSRF-TOKEN 到请求中
如果您使用的是 React,则可以重新使用以下代码手动包含它:
import React from 'react';
import SwaggerUI from "swagger-ui-react"
import "swagger-ui-react/swagger-ui.css"
import Cookies from 'universal-cookie';
const cookies = new Cookies();
const DocsPage = () => (
<SwaggerUI url="/v2/api-docs" requestInterceptor={(request) => {
request.headers['X-XSRF-TOKEN'] = cookies.get("XSRF-TOKEN")
}}/>
);
export default DocsPage;