Quarkus中配置Swagger UI仅展示Implicit认证流
只在Quarkus Swagger UI展示Implicit认证流的配置方法
要实现只显示implicit流、隐藏其他认证流,需要通过自定义SmallRye OpenAPI安全方案并禁用Quarkus OIDC自动生成的默认安全方案,具体配置如下:
1. 禁用OIDC自动生成的安全方案
Quarkus OIDC扩展默认会根据Keycloak配置生成包含所有支持流的OpenAPI安全方案,先在配置文件中禁用这个自动生成逻辑:
quarkus: oidc: openapi: security-scheme: disabled
2. 自定义只含Implicit流的安全方案
在application.yaml中配置SmallRye OpenAPI的安全方案,明确指定仅使用implicit流,并关联Keycloak的授权端点:
quarkus: smallrye-openapi: security-schemes: KeycloakImplicit: type: oauth2 flows: implicit: # 复用OIDC配置的授权服务器地址,自动拼接授权端点 authorizationUrl: ${quarkus.oidc.auth-server-url}/protocol/openid-connect/auth # 可选:添加客户端需要的权限范围 scopes: openid: 基础身份认证 email: 获取用户邮箱信息 # 全局应用该安全方案(也可在单个API接口上通过注解指定) security: - KeycloakImplicit: [openid]
3. (可选)给特定API接口绑定安全方案
如果不需要全局应用,可在需要授权的接口上使用@Security注解指定自定义的安全方案:
import org.eclipse.microprofile.openapi.annotations.security.Security; @GET @Path("/private-data") @Security(name = "KeycloakImplicit", scopes = {"openid"}) public String getPrivateData() { return "仅授权用户可见的内容"; }
4. 验证Keycloak客户端配置
确保Keycloak后台的对应客户端已启用Implicit流:
- 进入Keycloak后台 → 目标Realm → 客户端 → 你的客户端
- 在"Settings"标签将
Access Type设为public(Implicit流适配公共客户端场景) - 在"Authentication Flow Overrides"标签,启用Implicit Flow,同时禁用不需要的流(如Password、Client Credentials)
完成以上配置后,重启Quarkus应用,打开Swagger UI就能看到仅展示Implicit认证流的授权选项了。
内容的提问来源于stack exchange,提问作者JaB
相关产品推荐
相关产品推荐

