跳到正文

架构

关于

实验性扩展,由社区维护,不由 Quarkus 项目或团队提供和维护。

图表源码基线: f8edc23

图表保留该提交的结构与源码链接;当前行为以 Reference 为准。

下载 JSON 源文件

打开独立查看器 / 导出

架构 ​

扩展运行在 Quarkus 应用内部,提供 OAuth 协议处理与 token 签发;应用提供用户、客户端、持久化和访问规则。快速开始将授权服务器与资源 API 运行在不同进程中。也可以像部分仓库示例一样合并部署;各自的协议职责仍然独立。

三个边界 ​

组件职责使用的凭据
浏览器 / OAuth 客户端发起授权、处理 callback、兑换 code、调用 APIpublic client 使用 PKCE;confidential client 还需认证客户端自身
授权服务器认证用户和客户端、获取 consent、签发并记录 token用户登录、Form Cookie 与 OAuth 客户端认证各有职责
资源服务器验证 access token,判断是否允许当前操作Bearer token;相应流程显式配置后也可使用 DPoP

在 Vue 示例里,用户在授权服务器页面提交密码。Vue 在注册的 callback 收到 code,调用资源 API 时携带 access token。Form Cookie 不能充当资源 API 的凭据。

公开 API 与内部包 ​

以下 Java 包均以 io.quarkiverse.authorization.server 为前缀。runtime Gradle 模块同时包含公开 API 与内部实现,模块名不等于 API 边界。

包应用可使用的类型与职责
clientRegisteredClient、RegisteredClientRepository 及客户端 secret 接口
authorizationOAuth2AuthorizationService、OAuth2AuthorizationConsentService 及其存储模型
tokenOAuth2TokenGenerator、OAuth2TokenCustomizer、token 上下文和 AuthorizationServerKeySource
grant.authorizationcode、grant.devicecode 等 grant.* 包类型化请求、上下文、validator、consent policy 和页面 SPI
webTokenGrantHandler,通过 CDI 扩展 token grant 的 HTTP 适配契约
jdbc应用可以通过 CDI 装配的三个 JDBC 实现

runtime.* 保存内部协议服务、handler 和默认装配;deployment.* 保存内部 build steps。这两个包中的类即使声明为 public,也不属于应用扩展契约。例如应用实现 web.TokenGrantHandler;内置的 runtime.grant.authorizationcode.web.AuthorizationCodeGrantHandler 则通过内部 runtime.web.ProtocolExecutor 调用 AuthorizationCodeExchange。

架构图保留 11 个组件,每个组件的源码路径与行号均固定到同一个 Git 提交。图中的包标签区分公开契约与内部执行;选中组件可查看源码链接,关于菜单提供源码版本与 JSON 下载。可定制的契约见 CDI 扩展点。

构建期装配 ​

AuthorizationServerProcessor 在 Quarkus augmentation 阶段安装 Vert.x 路由、HTTP Security 集成和 CDI 组件。端点路径与可选功能决定安装内容;修改构建期或构建后固定的配置需要重新构建。

运行期配置提供 issuer、配置客户端、签名密钥和 DPoP 参数等值。“运行期”不表示扩展会在每个请求中重新加载这些值。

运行期请求处理 ​

Token Endpoint 的处理过程:

  1. Quarkus HTTP Security 和扩展的客户端认证组件建立客户端 SecurityIdentity。
  2. OAuth2TokenEndpointHandler 按 grant_type 选择 TokenGrantHandler。
  3. grant 的 parser 生成类型化请求;HTTP adapter 通过 ProtocolExecutor 在 worker 和有效 request context 中调用同步协议服务。
  4. 服务检查客户端与授权记录,再使用共享 OAuth2TokenGenerator 签发 token。
  5. HTTP 层输出结果或协议错误。

Authorization 与 Device Verification 在兑换 token 前还有浏览器交互。这些页面与重定向不属于资源 API。

扩展的协议路由使用 Vert.x handler;示例中的业务资源 API 使用 Quarkus REST。安装 OAuth 端点不要求应用编写 REST Resource。

源码:TokenGrantHandler、ProtocolExecutor、OAuth2TokenGeneratorProducer。

三类存储 ​

接口保存内容
RegisteredClientRepository客户端认证方式、grant、redirect URI、scope 与 token 设置
OAuth2AuthorizationService授权状态、已签发 token 与相关 metadata
OAuth2AuthorizationConsentService用户对指定客户端的历史 consent

默认使用内存实现。应用提供 CDI 仓储会替换对应默认实现;自定义客户端仓储不会自动导入 clients.*。见存储与签名密钥。

应用扩展点 ​

外部值用 Quarkus Config,行为用 CDI。应用可以提供用户 IdentityProvider、仓储、validator、consent policy/customizer、token customizer、key source 和页面 Bean,没有额外的统一配置 DSL。

单值接口替换默认实现;token customizer 等组合接口按顺序执行。优先使用职责最小的扩展点:增加一个 claim 不需要替换整个 token 生成器。

继续阅读 Authorization Code + PKCE、Client Credentials,或配置参考。实现边界见协议能力与边界。

文档适用于 1.0.0-beta2(d08a017)· Quarkus 3.33.3.1