Subject: WebAuthn + JWT Integration with webauthn4j-spring-security
Hi Spring Security Team,
I’m currently working on an authentication system using Spring Security WebAuthn with webauthn4j, and I want to integrate it with JWT tokens instead of using the default session-based authentication.
My setup:
Spring Boot + Spring Security (latest stable version)
webauthn4j-spring-security-core (0.11.2.RELEASE)
Frontend running on https://aali.loca.lt
Custom TempJwtFilter for handling JWTs
Goal: When a user successfully authenticates with WebAuthn (fingerprint/biometric), I want the server to return a signed JWT to the client. This token will then be used for subsequent API requests (stateless, no session cookies).
Here’s a simplified version of my SecurityConfig (Maven project):
@Configuration @EnableWebSecurity(debug = true) public class SecurityConfig {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http,
AuthenticationManager authManager,
TempJwtFilter tempJwtFilter) throws Exception {
WebAuthnAuthenticationFilter webAuthnFilter = new WebAuthnAuthenticationFilter();
webAuthnFilter.setAuthenticationManager(authManager);
webAuthnFilter.setAuthenticationSuccessHandler((request, response, authentication) -> {
String jwt = "dummy-token"; // TODO: generate real JWT
response.setContentType("application/json");
response.getWriter().write("""
{ "authenticated": true, "token": "%s" }
""".formatted(jwt));
});
webAuthnFilter.setAuthenticationFailureHandler((request, response, exception) -> {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.getWriter().write("{\"authenticated\": false}");
});
return http
.cors(cors -> cors.configurationSource(corsConfigurationSource()))
.csrf(csrf -> csrf.disable())
.addFilterBefore(tempJwtFilter, UsernamePasswordAuthenticationFilter.class)
.webAuthn(auth -> auth.rpId("aali.loca.lt"))
.build();
}
}
The Problem
The current WebAuthnAuthenticationFilter + WebAuthnAuthenticationProvider work seamlessly with session management.
However, if I try to integrate JWT (stateless auth), there’s no clear documentation or examples on how to replace the session with JWT handling.
I can hack it by writing a success handler that generates a JWT, but then I’m unsure what the recommended way is to:
Replace SecurityContext population with a JWT-based mechanism.
Avoid session persistence entirely.
Keep the WebAuthn flow compliant with Spring Security conventions.
Feature Request
Could you provide:
Guidance (or official documentation) on how to integrate WebAuthn with JWT tokens in Spring Security?
Possibly an extension/example project where successful WebAuthn authentication issues a JWT instead of establishing a session.
Clarification on whether this is supported out of the box, or if custom filters/providers are the only path.
Thank you for your time and help!