如何使用 Springdoc Open API 3 Spec 在 header 中为 OAuth2 隐式流添加 "Authorization : Bearer <token>"
How to add "Authorization : Bearer <token>" in header for OAuth2 implicit flows using Springdoc Open API 3 Spec
我正在从 Springfox 迁移到 Springdoc Open Api 3,我正在尝试实施身份验证流程:
目前,我已经实现了身份验证的隐式流程。如下所示:
@Bean
public OpenAPI customOpenAPI()
{
String authorizeUrl = <authorize-url>;
OAuthFlow oAuthFlow = new OAuthFlow();
oAuthFlow.authorizationUrl(authorizeUrl);
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("OAuth", new SecurityScheme()
.type(Type.OAUTH2)
.scheme("bearer")
.in(In.HEADER)
.bearerFormat("jwt")
.flows(new OAuthFlows().implicit(oAuthFlow))
)
);
}
现在,问题是,我被正确地重定向到 Keycloak 服务器并且身份验证按预期工作,但是当我尝试执行来自 Swagger UI 的请求时,Authorization:Bearer <token>
丢失了来自请求。
我尝试了多种解决方案,例如在端点上添加安全方案要求,但它不起作用。我错过了什么吗?或者我的实现流程是错误的?我在发送到后端的每个请求中都需要 Bearer 令牌。
因此,在尝试了几乎所有方法之后,以下解决方案对我有用:
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("OAuth", new SecurityScheme()
.type(Type.OAUTH2)
.scheme("bearer")
.bearerFormat("jwt")
.in(In.HEADER)
.name("Authorization")
.flows(new OAuthFlows().implicit(oAuthFlow))))
.addSecurityItem(new SecurityRequirement().addList("OAuth"));
因此,我正确地完成了大部分配置,但必须添加 SecurityRequirement
,它要求所有 API 在 header 中拥有授权令牌。
我正在从 Springfox 迁移到 Springdoc Open Api 3,我正在尝试实施身份验证流程:
目前,我已经实现了身份验证的隐式流程。如下所示:
@Bean
public OpenAPI customOpenAPI()
{
String authorizeUrl = <authorize-url>;
OAuthFlow oAuthFlow = new OAuthFlow();
oAuthFlow.authorizationUrl(authorizeUrl);
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("OAuth", new SecurityScheme()
.type(Type.OAUTH2)
.scheme("bearer")
.in(In.HEADER)
.bearerFormat("jwt")
.flows(new OAuthFlows().implicit(oAuthFlow))
)
);
}
现在,问题是,我被正确地重定向到 Keycloak 服务器并且身份验证按预期工作,但是当我尝试执行来自 Swagger UI 的请求时,Authorization:Bearer <token>
丢失了来自请求。
我尝试了多种解决方案,例如在端点上添加安全方案要求,但它不起作用。我错过了什么吗?或者我的实现流程是错误的?我在发送到后端的每个请求中都需要 Bearer 令牌。
因此,在尝试了几乎所有方法之后,以下解决方案对我有用:
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("OAuth", new SecurityScheme()
.type(Type.OAUTH2)
.scheme("bearer")
.bearerFormat("jwt")
.in(In.HEADER)
.name("Authorization")
.flows(new OAuthFlows().implicit(oAuthFlow))))
.addSecurityItem(new SecurityRequirement().addList("OAuth"));
因此,我正确地完成了大部分配置,但必须添加 SecurityRequirement
,它要求所有 API 在 header 中拥有授权令牌。