spring-boot - 如何添加“授权:承载" 在使用 Springdoc Open API 3 Spec 的 OAuth2 隐式流的标头中
问题描述
我正在从 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 在标头中都有授权令牌。
推荐阅读
- archunit - ArchUnit:如何在类的签名/API 中检查不需要的依赖项?
- asp.net - 为用户分配角色 Asp.Net MVC
- java - 如何替换字符串中的特定单词
- c++ - 如何选择点云的细化程度(xyz 点)
- java - java 8 工具 jar 中不存在 Com.sun.mirror Api
- amazon-web-services - 如何在 AWS 实例上为 hazelcast 配置 spring mvc 项目?
- elasticsearch - 如何从另一个索引/类型按聚合排序
- jquery - 当数据表中没有数据时,分页最后一个按钮不会禁用
- vue.js - VueJS:如何从全局 JS 函数导航到不同的路线
- c# - 使用基于 System.IO 和 c# 的 Unity3D 从文本文件中删除特定行