2.7. 处理密钥


您可以使用 smallrye.jwt.sign.key.locationsmallrye.jwt.encrypt.key.location 属性来指定签名和加密密钥的位置。这些密钥可以位于本地文件系统上,位于 classpath 上,或者从远程端点获取。密钥可以是 PEMJSON Web 密钥(JWK) 格式。例如:

smallrye.jwt.sign.key.location=privateKey.pem
smallrye.jwt.encrypt.key.location=publicKey.pem
Copy to Clipboard Toggle word wrap

或者,您可以使用 MicroProfile ConfigSourcesmallrye.jwt.sign.keysmallrye.jwt.encrypt.key 属性从外部服务获取密钥,如 HashiCorp Vault 或其他 secret 管理器:

smallrye.jwt.sign.key=${private.key.from.vault}
smallrye.jwt.encrypt.key=${public.key.from.vault}
Copy to Clipboard Toggle word wrap

在本例中,private.key.from.vaultpublic.key.from.vaultPEMJWK 格式的密钥值,由自定义 ConfigSource 提供。

smallrye.jwt.sign.keysmallrye.jwt.encrypt.key 属性也可以直接包含 base64 编码的私钥或公钥值。

但请注意,不建议在配置中直接显示私钥。仅在需要从远程 secret manager 获取签名密钥值时,才使用 smallrye.jwt.sign.key 属性。

密钥也可以由构建令牌的代码加载,然后提供给 JWT Build API 以进行令牌创建。

如果您需要使用对称 secret 密钥签名或加密令牌,请考虑使用 io.smallrye.jwt.util.KeyUtils 生成所需长度的 SecretKey

例如,需要使用 HS512 算法(512/8)为令牌签名 64 字节密钥,需要使用 A256KW 算法加密内容加密密钥(256/8):

import javax.crypto.SecretKey;
import io.smallrye.jwt.KeyEncryptionAlgorithm;
import io.smallrye.jwt.SignatureAlgorithm;
import io.smallrye.jwt.build.Jwt;
import io.smallrye.jwt.util.KeyUtils;

SecretKey signingKey = KeyUtils.generateSecretKey(SignatureAlgorithm.HS512);
SecretKey encryptionKey = KeyUtils.generateSecretKey(KeyEncryptionAlgorithm.A256KW);
String jwt = Jwt.claim("sensitiveClaim", getSensitiveClaim()).innerSign(signingKey).encrypt(encryptionKey);
Copy to Clipboard Toggle word wrap

您还可以考虑使用 JSON Web 密钥(JWK)或 JSON Web 密钥集(JWK Set)格式将 secret 密钥存储在安全文件系统中。您可以使用 smallrye.jwt.sign.key.locationsmallrye.jwt.encrypt.key.location 属性来引用密钥。

JWK 示例

{
 "kty":"oct",
 "kid":"secretKey",
 "k":"Fdh9u8rINxfivbrianbbVT1u232VQBZYKx1HGAGPt2I"
}
Copy to Clipboard Toggle word wrap

JWK 设置示例

{
 "keys": [
   {
     "kty":"oct",
     "kid":"secretKey1",
     "k":"Fdh9u8rINxfivbrianbbVT1u232VQBZYKx1HGAGPt2I"
   },
   {
     "kty":"oct",
     "kid":"secretKey2",
     "k":"AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_T-1qS0gZH75aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow"
   }
 ]
}
Copy to Clipboard Toggle word wrap

您还可以使用 io.smallrye.jwt.util.KeyUtils 生成一对非对称 RSA 或 EC 密钥。这些密钥可以存储 JWKJWK SetPEM 格式。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat