Skip to main content

Dotenvx Spring Boot添加ES256K JWT和secp256k1签名支持

· 2 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

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类,包括signDataverifySignature两个静态方法, 直接调用即可。

此外考虑到public/private key的解析方便,你可以使用Secp256k1KeyParser类快速解析public/private key字符串, 方便和其他加密框架配合。

整体下来,dotenvx-spring-boot主要特性如下: