如何在同一Quarkus实例中同时保护REST API与Web应用?
Quarkus单实例托管前端与REST端点的安全实现方案
一、单实例场景的替代方案
除了多租户配置+自定义URL解析的方式,还有两种更简洁的原生支持方案:
- 基于路径的OIDC流区分:Quarkus OIDC支持按路径配置不同的认证流。为前端路径(如
/ui/*)配置授权码流适配Web前端登录,为REST API路径(如/api/*)配置Bearer令牌流适配服务间调用,无需自定义代码。典型配置示例:# 前端UI的OIDC授权码流配置 quarkus.oidc.auth-ui.paths=/ui/* quarkus.oidc.client-id=web-frontend-client quarkus.oidc.credentials.secret=your-client-secret quarkus.oidc.authorization-path=/protocol/openid-connect/auth quarkus.oidc.token-path=/protocol/openid-connect/token # REST API的OIDC Bearer流配置 quarkus.oidc.api.paths=/api/* quarkus.oidc.api.client-id=rest-api-client quarkus.oidc.api.bearer-only=true - 自定义安全过滤器:实现
ContainerRequestFilter或SecurityIdentityAugmentor接口,根据请求路径判断请求类型,分别应用前端会话验证或API令牌校验逻辑。这种方式灵活性更高,但需要编写更多自定义代码。
二、前后端分离部署的官方支持情况
你提到的前端与REST服务分属不同Quarkus实例、前端通过Bearer令牌调用服务的方案,是Quarkus官方推荐的微服务架构范式,完全受官方支持:
- 前端实例(托管Qute)通过授权码流完成用户登录,将访问令牌存储在HttpOnly Cookie中;
- 前端发起API请求时,自动将令牌放入
Authorization: Bearer <token>请求头; - 后端实例配置为
bearer-only模式,仅负责验证令牌有效性,不处理登录跳转等前端逻辑。
该方案的优势在于前后端安全边界清晰,可独立扩容维护,符合现代云原生应用的设计原则。
补充说明
你关注的并行使用两种OIDC流的方案,核心就是基于路径的配置思路,属于单实例场景下的原生解决方案,无需依赖复杂的多租户配置。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

