212212import org .springframework .security .web .server .firewall .ServerExchangeRejectedException ;
213213import org .springframework .security .web .session .HttpSessionCreatedEvent ;
214214import org .springframework .security .web .webauthn .api .AuthenticationExtensionsClientInputs ;
215+ import org .springframework .security .web .webauthn .api .AuthenticationExtensionsClientOutputs ;
216+ import org .springframework .security .web .webauthn .api .AuthenticatorAssertionResponse ;
215217import org .springframework .security .web .webauthn .api .AuthenticatorTransport ;
216218import org .springframework .security .web .webauthn .api .Bytes ;
217219import org .springframework .security .web .webauthn .api .CredProtectAuthenticationExtensionsClientInput ;
220+ import org .springframework .security .web .webauthn .api .CredentialPropertiesOutput ;
218221import org .springframework .security .web .webauthn .api .ImmutableAuthenticationExtensionsClientInput ;
219222import org .springframework .security .web .webauthn .api .ImmutableAuthenticationExtensionsClientInputs ;
223+ import org .springframework .security .web .webauthn .api .ImmutableAuthenticationExtensionsClientOutputs ;
220224import org .springframework .security .web .webauthn .api .ImmutablePublicKeyCredentialUserEntity ;
225+ import org .springframework .security .web .webauthn .api .PublicKeyCredential ;
221226import org .springframework .security .web .webauthn .api .PublicKeyCredentialDescriptor ;
222227import org .springframework .security .web .webauthn .api .PublicKeyCredentialRequestOptions ;
223228import org .springframework .security .web .webauthn .api .PublicKeyCredentialType ;
224229import org .springframework .security .web .webauthn .api .PublicKeyCredentialUserEntity ;
230+ import org .springframework .security .web .webauthn .api .TestAuthenticationAssertionResponses ;
225231import org .springframework .security .web .webauthn .api .TestBytes ;
232+ import org .springframework .security .web .webauthn .api .TestPublicKeyCredential ;
226233import org .springframework .security .web .webauthn .api .TestPublicKeyCredentialRequestOptions ;
227234import org .springframework .security .web .webauthn .api .TestPublicKeyCredentialUserEntity ;
228235import org .springframework .security .web .webauthn .api .UserVerificationRequirement ;
229236import org .springframework .security .web .webauthn .authentication .WebAuthnAuthentication ;
237+ import org .springframework .security .web .webauthn .authentication .WebAuthnAuthenticationRequestToken ;
238+ import org .springframework .security .web .webauthn .management .RelyingPartyAuthenticationRequest ;
230239import org .springframework .util .ReflectionUtils ;
231240
232241import static org .assertj .core .api .Assertions .assertThat ;
@@ -629,6 +638,26 @@ class SpringSecurityCoreVersionSerializableTests {
629638 .allowCredentials (List .of (descriptor ))
630639 .build ()
631640 );
641+
642+ CredentialPropertiesOutput credentialOutput = new CredentialPropertiesOutput (false );
643+ AuthenticationExtensionsClientOutputs outputs = new ImmutableAuthenticationExtensionsClientOutputs (credentialOutput );
644+ AuthenticatorAssertionResponse response = TestAuthenticationAssertionResponses .createAuthenticatorAssertionResponse ()
645+ .build ();
646+ PublicKeyCredential <AuthenticatorAssertionResponse > credential = TestPublicKeyCredential .createPublicKeyCredential (
647+ response , outputs )
648+ .build ();
649+ RelyingPartyAuthenticationRequest authRequest = new RelyingPartyAuthenticationRequest (
650+ TestPublicKeyCredentialRequestOptions .create ().build (),
651+ credential
652+ );
653+ WebAuthnAuthenticationRequestToken requestToken = new WebAuthnAuthenticationRequestToken (authRequest );
654+ requestToken .setDetails (details );
655+ generatorByClassName .put (CredentialPropertiesOutput .class , (o ) -> credentialOutput );
656+ generatorByClassName .put (ImmutableAuthenticationExtensionsClientOutputs .class , (o ) -> outputs );
657+ generatorByClassName .put (AuthenticatorAssertionResponse .class , (r ) -> response );
658+ generatorByClassName .put (RelyingPartyAuthenticationRequest .class , (r ) -> authRequest );
659+ generatorByClassName .put (PublicKeyCredential .class , (r ) -> credential );
660+ generatorByClassName .put (WebAuthnAuthenticationRequestToken .class , (r ) -> requestToken );
632661 // @formatter:on
633662 }
634663
@@ -643,8 +672,15 @@ void serializeCurrentVersionClasses(Class<?> clazz) throws Exception {
643672 return ;
644673 }
645674 Files .createFile (filePath );
646- Object instance = instancioWithDefaults (clazz ).create ();
647- assertThat (instance ).isInstanceOf (clazz );
675+ Object instance ;
676+ if (clazz .equals (PublicKeyCredential .class )) {
677+ instance = instancioWithParameter ((Class <PublicKeyCredential >) clazz ).create ();
678+ }
679+ else {
680+ instance = instancioWithDefaults (clazz ).create ();
681+ }
682+ // Object instance = instancioWithDefaults(clazz).create();
683+ // assertThat(instance).isInstanceOf(clazz);
648684 try (FileOutputStream fileOutputStream = new FileOutputStream (file );
649685 ObjectOutputStream objectOutputStream = new ObjectOutputStream (fileOutputStream )) {
650686 objectOutputStream .writeObject (instance );
@@ -656,6 +692,14 @@ void serializeCurrentVersionClasses(Class<?> clazz) throws Exception {
656692 }
657693 }
658694
695+ private static InstancioApi <?> instancioWithParameter (Class <PublicKeyCredential > clazz ) {
696+ InstancioApi <?> instancio = Instancio .of (clazz ).withTypeParameters (AuthenticatorAssertionResponse .class );
697+ if (generatorByClassName .containsKey (clazz )) {
698+ instancio .supply (Select .all (clazz ), generatorByClassName .get (clazz ));
699+ }
700+ return instancio ;
701+ }
702+
659703 @ ParameterizedTest
660704 @ MethodSource ("getFilesToDeserialize" )
661705 void shouldBeAbleToDeserializeClassFromPreviousVersion (Path filePath ) {
0 commit comments