Spring Boot中如何为Swagger UI的OIDC认证添加Client ID?
解决Swagger UI对接Keycloak OIDC时Client ID为空的问题
你遇到的问题根源是当前的OpenAPI配置只指定了OIDC发现端点,但没提供Swagger UI发起授权请求必需的客户端ID参数,导致跳转Keycloak时client_id为空,触发“Client not found”错误。
修改OpenApiConfiguration配置类
需要在SecurityScheme中补充OAuth2授权流的配置,明确指定客户端ID,同时可以配置授权和令牌端点(也可依赖OIDC发现自动获取,但显式配置更稳定)。修改后的代码如下:
@Bean public OpenAPI customOpenAPI() { return new OpenAPI() .components(new Components() .addSecuritySchemes("open-id", new SecurityScheme() .type(SecurityScheme.Type.OPENIDCONNECT) .openIdConnectUrl("https://doma.in/auth/realms/realm/.well-known/openid-configuration") // 添加OAuth2授权码流配置,指定客户端ID .flows(new OAuthFlows() .authorizationCode(new OAuthFlow() .clientId("你的Swagger客户端ID") // 替换为Keycloak中创建的客户端ID .authorizationUrl("https://doma.in/auth/realms/realm/protocol/openid-connect/auth") .tokenUrl("https://doma.in/auth/realms/realm/protocol/openid-connect/token") ) ) ) ) .addSecurityItem(new SecurityRequirement().addList("open-id")); }
额外注意事项
- 确保Keycloak中已创建对应客户端,访问类型建议设为public(Swagger UI属于前端应用,无需客户端密钥)
- 客户端的重定向URI必须包含Swagger UI的回调地址,例如
http://localhost:8080/swagger-ui/oauth2-redirect.html(根据你的实际端口和路径调整) - 重启Spring Boot应用后,再次点击Swagger UI的授权锁,选择对应选项即可正常跳转Keycloak完成授权
内容的提问来源于stack exchange,提问作者Kristian Heitkamp
相关产品推荐
相关产品推荐

