用途
本资料是一份 Quarkus 安全审查与实现指南,汇总了在 Quarkus 应用中实施认证、授权与输入校验的最佳实践。适用于需要为 Quarkus 服务添加安全能力的开发场景,包括新增认证方式、实现访问控制、校验用户输入、配置 CORS 与安全头、管理密钥、添加限流与暴力破解防护、扫描依赖 CVE,以及使用 MicroProfile JWT 或 SmallRye JWT 等。
主要能力
认证
- JWT 认证:通过 @Authenticated 保护资源,注入 JsonWebToken 与 SecurityIdentity,读取用户名、角色与主体名称。配置项包括 mp.jwt.verify.publickey.location 与 mp.jwt.verify.issuer。
- OIDC:配置 quarkus.oidc.auth-server-url、quarkus.oidc.client-id、quarkus.oidc.credentials.secret。
- 自定义认证过滤器:实现 ContainerRequestFilter,使用 @Priority(Priorities.AUTHENTICATION),对缺失或格式错误的 Authorization 头立即返回 401。
授权
- 基于角色的访问控制:在类或方法上使用 @RolesAllowed,支持多角色。
- 编程式安全检查:注入 SecurityIdentity,使用 isAnonymous()、hasRole()、getPrincipal().getName() 进行所有权与角色判断,不满足时返回 403。
输入校验
- Bean Validation:在 DTO 上使用 @NotBlank、@Size、@Email、@NotNull、@Min、@Max、@Pattern 等注解,并在资源方法参数上使用 @Valid。
- 自定义校验器:定义注解(如 @ValidUsername)并实现 ConstraintValidator。
SQL 注入防护
- Panache 默认安全:使用参数化查询(位置参数 ?1、命名参数 Parameters.with)。
- 原生查询必须使用参数绑定,避免字符串拼接。
密码哈希
- 使用 BcryptUtil.bcryptHash 与 BcryptUtil.matches 进行哈希与校验,注册时存储哈希值,认证时比对。
CORS 配置
- 通过 application.properties 设置 quarkus.http.cors 相关项:origins、methods、headers、exposed-headers、access-control-max-age、access-control-allow-credentials。
密钥管理
- 不在配置文件中存放密钥,改用环境变量(如 ${DB_PASSWORD}、${OIDC_CLIENT_SECRET})或 HashiCorp Vault(quarkus.vault.url、quarkus.vault.authentication.kubernetes.role)。可通过 ConfigProvider 读取配置值。
限流
- 实现 ContainerRequestFilter,使用 RateLimiter 按客户端标识限流,超限返回 429。安全提示:不要直接使用 X-Forwarded-For(可被伪造),应使用容器提供的远程地址;若位于可信代理之后,可配置 quarkus.http.proxy.proxy-address-forwarding=true。
安全响应头
- 通过 ContainerResponseFilter 添加 X-Frame-Options、X-Content-Type-Options、X-XSS-Protection、Strict-Transport-Security、Content-Security-Policy。CSP 中 script-src 避免使用 'unsafe-inline',建议使用 nonce 或 hash。
审计日志
- 注入 SecurityIdentity,记录用户、操作、资源与时间戳,对敏感操作进行审计。
依赖安全扫描
- Maven:mvn org.owasp:dependency-check-maven:check
- Gradle:./gradlew dependencyCheckAnalyze
- 查看 Quarkus 扩展:quarkus extension list --installable
使用方式
资料以代码示例与配置片段形式给出,可直接参考用于 Quarkus 项目:在资源类上添加认证与授权注解,在 DTO 上添加校验注解,在配置文件中设置 JWT/OIDC/CORS 参数,在过滤器中实现自定义认证、限流与安全头,在服务中实现密码哈希与审计。
适用场景
- 为 Quarkus REST 服务添加 JWT 或 OIDC 认证。
- 实现基于角色与资源所有权的访问控制。
- 对用户输入进行校验,防止非法数据。
- 防止 SQL 注入、明文密码存储与密钥硬编码。
- 配置跨域策略与安全响应头。
- 对公开接口限流,记录敏感操作审计日志。
- 扫描依赖中的已知漏洞。
限制
资料未提供具体版本要求、性能数据、收费信息或平台限制;部分示例(如 validateToken 方法体)为占位实现,需按实际环境补全。