如何在 Spring Boot 中验证 jwt 令牌?

Gok*_*vel 7 jwt spring-boot ed25519 nimbus-jose-jwt eddsa

我想在我的 Spring Boot 应用程序中实现 JWT 验证。我们用于签名令牌的算法是 Ed25519\EDDSA 。

我找不到正确的依赖项/库来使用 ED25519 算法实现 Jwt 验证器。

有人可以建议使用 Maven 依赖项来验证 JWT 令牌吗?

小智 4

答案来得很晚,但我只是试图解决同样的问题并决定分享我的结论。

我将Spring Security 与 OAuth 2.0 资源服务器结合使用来验证 JWT。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但是,Spring Security 的默认 JWT 解码器NimbusJwtDecoder不支持 EdDSA(请参阅支持的签名算法列表。您必须编写自己的JWTDecoder.

幸运的是,Spring Security 依赖于Nimbus JOSE+JWT 库,该库已经支持 EdDSA。要使用库验证 EdDSA 签名,请添加以下依赖项:

<dependency>
  <groupId>com.google.crypto.tink</groupId>
  <artifactId>tink</artifactId>
  <version>1.6.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

您的代码将在某个时候调用以下几行,其中encodedJwt是编码的 jwt 字符串。

SignedJWT signedJWT = SignedJWT.parse(encodedJwt);

JWSVerifier verifier = new Ed25519Verifier(publicJWK);
assertTrue(signedJWT.verify(verifier));

Run Code Online (Sandbox Code Playgroud)

完整的示例可以在这里找到:https ://connect2id.com/products/nimbus-jose-jwt/examples/jwt-with-eddsa