8.2. 使用来自密码库的值
库包含敏感数据,红帽构建的 Keycloak 会相应地处理 secret。在访问 secret 时,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 对象中的 secret 至少会位于下一个 GC 舍入状态。因此,首选使用普通字节和字符数组和缓冲区。