Quarkus中Swagger UI集成OIDC后请求未携带Bearer token如何解决?
问题根因
你已经正确配置了OIDC安全方案和Swagger UI的授权跳转逻辑,但没有将定义好的OIDC安全方案绑定到需要鉴权的API端点,因此Swagger UI不会自动在请求头中添加Bearer Token。
修复步骤
方案1:全局绑定安全方案(推荐)
在application.properties中添加以下配置,将你定义的名为Keycloak的安全方案应用到所有接口:
quarkus.smallrye-openapi.security-requirement=Keycloak
配置后所有需要鉴权的接口会自动关联该安全方案,Swagger UI授权后会自动携带Token。
方案2:单独给指定接口绑定
如果不需要全局生效,可以在对应的资源类或接口方法上添加@SecurityRequirement注解:
import org.eclipse.microprofile.openapi.annotations.security.SecurityRequirement; @Path("/health") @Authenticated @SecurityRequirement(name = "Keycloak") // 此处name要和你配置的security-scheme-name完全一致 public class ReactiveHealthResource { // 原有代码保持不变 }
额外校验项
如果完成上述配置后仍有问题,检查以下配置:
- 确认Keycloak中对应客户端的
Standard Flow Enabled已开启,且客户端类型为public(Swagger UI是前端应用,无法存储客户端密钥) - 授权时在Swagger UI的弹框中勾选
openidscope,否则OIDC流程不会返回合法的身份Token - 如果Keycloak强制要求PKCE校验,在配置文件中添加:
quarkus.swagger-ui.oauth.use-pkce-with-authorization-code-grant=true
内容的提问来源于stack exchange,提问作者Alex Haslam
相关产品推荐
相关产品推荐

