@ -206,11 +206,21 @@ import org.springframework.security.web.savedrequest.DefaultSavedRequest;
@@ -206,11 +206,21 @@ import org.springframework.security.web.savedrequest.DefaultSavedRequest;
import org.springframework.security.web.savedrequest.SimpleSavedRequest ;
import org.springframework.security.web.server.firewall.ServerExchangeRejectedException ;
import org.springframework.security.web.session.HttpSessionCreatedEvent ;
import org.springframework.security.web.webauthn.api.AuthenticationExtensionsClientInputs ;
import org.springframework.security.web.webauthn.api.AuthenticatorTransport ;
import org.springframework.security.web.webauthn.api.Bytes ;
import org.springframework.security.web.webauthn.api.CredProtectAuthenticationExtensionsClientInput ;
import org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientInput ;
import org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientInputs ;
import org.springframework.security.web.webauthn.api.ImmutablePublicKeyCredentialUserEntity ;
import org.springframework.security.web.webauthn.api.PublicKeyCredentialDescriptor ;
import org.springframework.security.web.webauthn.api.PublicKeyCredentialRequestOptions ;
import org.springframework.security.web.webauthn.api.PublicKeyCredentialType ;
import org.springframework.security.web.webauthn.api.PublicKeyCredentialUserEntity ;
import org.springframework.security.web.webauthn.api.TestBytes ;
import org.springframework.security.web.webauthn.api.TestPublicKeyCredentialRequestOptions ;
import org.springframework.security.web.webauthn.api.TestPublicKeyCredentialUserEntity ;
import org.springframework.security.web.webauthn.api.UserVerificationRequirement ;
import org.springframework.security.web.webauthn.authentication.WebAuthnAuthentication ;
import org.springframework.util.ReflectionUtils ;
@ -554,7 +564,37 @@ class SpringSecurityCoreVersionSerializableTests {
@@ -554,7 +564,37 @@ class SpringSecurityCoreVersionSerializableTests {
} ) ;
// webauthn
generatorByClassName . put ( Bytes . class , ( r ) - > TestBytes . get ( ) ) ;
CredProtectAuthenticationExtensionsClientInput . CredProtect credProtect = new CredProtectAuthenticationExtensionsClientInput . CredProtect (
CredProtectAuthenticationExtensionsClientInput . CredProtect . ProtectionPolicy . USER_VERIFICATION_OPTIONAL ,
true ) ;
Bytes id = TestBytes . get ( ) ;
AuthenticationExtensionsClientInputs inputs = new ImmutableAuthenticationExtensionsClientInputs (
ImmutableAuthenticationExtensionsClientInput . credProps ) ;
// @formatter:off
PublicKeyCredentialDescriptor descriptor = PublicKeyCredentialDescriptor . builder ( )
. id ( id )
. type ( PublicKeyCredentialType . PUBLIC_KEY )
. transports ( Set . of ( AuthenticatorTransport . USB ) )
. build ( ) ;
// @formatter:on
generatorByClassName . put ( AuthenticatorTransport . class , ( a ) - > AuthenticatorTransport . USB ) ;
generatorByClassName . put ( PublicKeyCredentialType . class , ( k ) - > PublicKeyCredentialType . PUBLIC_KEY ) ;
generatorByClassName . put ( UserVerificationRequirement . class , ( r ) - > UserVerificationRequirement . REQUIRED ) ;
generatorByClassName . put ( CredProtectAuthenticationExtensionsClientInput . CredProtect . class , ( c ) - > credProtect ) ;
generatorByClassName . put ( CredProtectAuthenticationExtensionsClientInput . class ,
( c ) - > new CredProtectAuthenticationExtensionsClientInput ( credProtect ) ) ;
generatorByClassName . put ( ImmutableAuthenticationExtensionsClientInputs . class , ( i ) - > inputs ) ;
generatorByClassName . put ( ImmutableAuthenticationExtensionsClientInput . class ,
( i ) - > ImmutableAuthenticationExtensionsClientInput . credProps ) ;
generatorByClassName . put ( Bytes . class , ( b ) - > id ) ;
generatorByClassName . put ( PublicKeyCredentialDescriptor . class , ( d ) - > descriptor ) ;
// @formatter:off
generatorByClassName . put ( PublicKeyCredentialRequestOptions . class , ( o ) - > TestPublicKeyCredentialRequestOptions . create ( )
. extensions ( inputs )
. allowCredentials ( List . of ( descriptor ) )
. build ( )
) ;
// @formatter:on
generatorByClassName . put ( ImmutablePublicKeyCredentialUserEntity . class ,
( r ) - > TestPublicKeyCredentialUserEntity . userEntity ( ) . id ( TestBytes . get ( ) ) . build ( ) ) ;
generatorByClassName . put ( WebAuthnAuthentication . class , ( r ) - > {