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。
希望这可以帮助任何希望实现相同目标的人
我想对 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。 希望这可以帮助任何希望实现相同目标的人