Quarkus + Swagger UI + Keycloak

Quarkus + Swagger UI + Keycloak

我想对 Quarkus 生成的 Swagger UI 使用我的 Keycloak 身份验证。 这是我在 application.properties:

中的配置
quarkus.swagger-ui.oauth2-redirect-url=http://localhost:8080/q/swagger-ui/oauth2-redirect.html
quarkus.smallrye-openapi.security-scheme=oidc
quarkus.smallrye-openapi.security-scheme-name=Keycloak
quarkus.smallrye-openapi.oidc-open-id-connect-url=http://localhost:8888/auth/realms/myrealm/.well-known/openid-configuration
quarkus.swagger-ui.oauth2-redirect-url=http://localhost:8080/q/swagger-ui

我的 REST 控制器是这样注释的:

@Path("/my-path")
@Authenticated
@SecurityRequirement(name = "Keycloak")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class MyController {

    @GET
    public List<MyObject> listAll() {
       // [...]
    }
}

现在,当我在 Swagger 中单击“授权”按钮时,不会被重定向到我的 Keycloak 登录页面,我会看到一个包含所有不同可用授权的弹出窗口:

我无法使用其中任何一个,因为我的 Keycloak 不允许直接授权

如何实现重定向登录?这甚至可能吗?

奖金问题:为什么 swagger 属性在 IntelliJ 中显示为未使用?

好吧,我找到了一种让它工作的方法,尽管在 Keycloak 中使用隐式流程和专用的第二个 (public) 客户端

夸尔库斯 application.properties:

# Swagger
quarkus.smallrye-openapi.security-scheme=oauth2-implicit
quarkus.smallrye-openapi.security-scheme-name=Keycloak
quarkus.smallrye-openapi.oauth2-implicit-authorization-url=http://localhost:8888/auth/realms/my-realm/protocol/openid-connect/auth
quarkus.swagger-ui.oauth2-redirect-url=http://localhost:8080/q/swagger-ui/oauth2-redirect.html

重定向 URL 需要 oauth2-redirect.html

现在我只需要输入client_id:

然后我被重定向到 Keycloak,然后又回到 Swagger-UI。 希望这可以帮助任何希望实现相同目标的人