7.2. 从 vault 消耗值


库包含敏感数据,红帽构建的 Keycloak 会相应地处理 secret。在访问 secret 时,secret 会从密码库获取,并仅在所需时间保留在 JVM 内存中。然后,所有可能尝试丢弃来自 JVM 内存的内容。这可以通过仅在 try-with-resources 语句中使用 vault secret 来实现,如下所示:

    char[] c;
    try (VaultCharSecret cSecret = session.vault().getCharSecret(SECRET_NAME)) {
        // ... use cSecret
        c = cSecret.getAsArray().orElse(null);
        // if c != null, it now contains password
    }

    // if c != null, it now contains garbage
Copy to Clipboard Toggle word wrap

这个示例使用 KeycloakSession.vault () 作为用于访问 secret 的入口点。直接使用 VaultProvider.obtainSecret 方法也很有可能。但是 vault () 方法具有将原始 secret (通常是字节阵列)解释为字符数组(通过 vault ().getCharSecret ())或 String (via vault ().getStringSecret ())的功能,除了获取原始的非解释值(通过 vault ().getRawSecret () 方法)。

请注意,由于 String 对象是不可变的,因此无法通过使用随机垃圾覆盖来丢弃其内容。虽然在默认的 VaultStringSecret 实现中采取了措施以防止内部化 String,但存储在 String 对象中的 secret 至少会存在于下一个 GC 循环中。因此,最好使用普通字节和字符数组和缓冲区。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部