8.2. 从 vault 中消耗值
库包含敏感数据,红帽构建的 Keycloak 会相应地对待 secret。在访问机密时,该机密将从密码库获取,并且仅在必要时间保留在 JVM 内存中。然后,所有可能都会尝试从 JVM 内存丢弃其内容。这可以通过仅在 try-with-resources 语句中使用 vault secret 来实现,如下所示:
这个示例使用 KeycloakSession.vault () 作为访问 secret 的入口点。直接使用 VaultProvider.obtainSecret 方法也可以实现。但是,vault () 方法具有将原始 secret (通常是字节阵列)作为字符数组的功能(通过 vault ().getCharSecret ())或 String (通过 vault ().getStringSecret ())来获取原始的未解释值(通过 vault ().getRawSecret () 方法)。
请注意,由于 String 对象不可变,因此无法通过使用随机垃圾覆盖来丢弃其内容。虽然在默认的 VaultStringSecret 实现中已采取措施以防止内部化 String,但 String 对象中存储的 secret 至少会到下一个 GC 舍入。因此,首选使用普通字节和字符数组和缓冲区。