Dotenvx Spring Boot添加ES256K JWT和secp256k1签名支持
· 2 min read
JWT在Web应用中应用非常广泛,对Spring Boot应用也不例外,不少同学都会使用Nimbus JOSE + JWT生成并验证JWT, 当然Nimbus JOSE + JWT也是Spring Boot推荐的JWT开发包。
Nimbus JOSE + JWT覆盖多种算法支持,典型的如HS256,RS256等,当然也包括secp256k1的支持,其算法名称为ES256K
,
详细请参考JSON Web Token (JWT) with ES256K (secp256k1) signature。
考虑到使用的便捷性,dotenvx-spring-boot添加了Secp256k1JwtService
类,主要是更方便生成和验证ES256K算法的JWT,样例代码如下:
@Test
public void testGenerateJwt() throws Exception {
final ECKeyPair keyPair = Ecies.generateEcKeyPair();
String subject = "example-user";
JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
.subject(subject)
.issuer("dotenvx")
.issueTime(new Date())
.expirationTime(new Date(System.currentTimeMillis() + 3600000)) // 1 hour expiration
.build();
final BCECPublicKey publicKey = keyPair.getPublic();
final BCECPrivateKey privateKey = keyPair.getPrivate();
final String jwtToken = Secp256k1JwtService.createJwtToken(privateKey, claimsSet);
final JWTClaimsSet jwtClaimsSet = Secp256k1JwtService.verifyJwt(jwtToken, publicKey);
assertThat(jwtClaimsSet.getSubject()).isEqualTo(subject);
}
此外签名和验证也非常简单,所以dotenvx-spring-boot也添加了Secp256k1Signer
类,包括signData
和verifySignature
两个静态方法,
直接调用即可。
此外考虑到public/private key的解析方便,你可以使用Secp256k1KeyParser
类快速解析public/private key字符串,
方便和其他加密框架配合。
整体下来,dotenvx-spring-boot主要特性如下:
- 配置项加密支持: 内置
application.properties
支持,开发阶段请使用Dotenvx JetBrains Plugin来加密配置项 - JSON局部字段加密支持: 详细请参考 如何使用Dotenvx保护Spring Boot REST API的字段级加密?
ES256K
JWT生成和验证:提供便捷API- secp256k1签名支持
- secp256k1公私钥解析支持:请使用
Ecies
类生成公私钥对