8686import org .springframework .security .authorization .AuthorityAuthorizationDecision ;
8787import org .springframework .security .authorization .AuthorizationDecision ;
8888import org .springframework .security .authorization .AuthorizationDeniedException ;
89+ import org .springframework .security .authorization .FactorAuthorizationDecision ;
90+ import org .springframework .security .authorization .RequiredFactor ;
91+ import org .springframework .security .authorization .RequiredFactorError ;
8992import org .springframework .security .authorization .event .AuthorizationEvent ;
9093import org .springframework .security .authorization .event .AuthorizationGrantedEvent ;
9194import org .springframework .security .cas .authentication .CasAssertionAuthenticationToken ;
162165import org .springframework .security .oauth2 .jwt .JwtValidationException ;
163166import org .springframework .security .oauth2 .jwt .TestJwts ;
164167import org .springframework .security .oauth2 .server .authorization .OAuth2Authorization ;
168+ import org .springframework .security .oauth2 .server .authorization .OAuth2AuthorizationCode ;
165169import org .springframework .security .oauth2 .server .authorization .OAuth2AuthorizationConsent ;
166170import org .springframework .security .oauth2 .server .authorization .OAuth2AuthorizationServerMetadata ;
167171import org .springframework .security .oauth2 .server .authorization .OAuth2ClientRegistration ;
168172import org .springframework .security .oauth2 .server .authorization .OAuth2TokenIntrospection ;
169173import org .springframework .security .oauth2 .server .authorization .OAuth2TokenType ;
170174import org .springframework .security .oauth2 .server .authorization .TestOAuth2Authorizations ;
171175import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2AccessTokenAuthenticationToken ;
176+ import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2AuthorizationCodeRequestAuthenticationException ;
172177import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2AuthorizationCodeRequestAuthenticationToken ;
173178import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2AuthorizationConsentAuthenticationToken ;
174179import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2AuthorizationGrantAuthenticationToken ;
175180import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2ClientAuthenticationToken ;
181+ import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2ClientCredentialsAuthenticationToken ;
176182import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2ClientRegistrationAuthenticationToken ;
177183import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2DeviceAuthorizationConsentAuthenticationToken ;
178184import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2DeviceAuthorizationRequestAuthenticationToken ;
185+ import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2DeviceCodeAuthenticationToken ;
179186import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2DeviceVerificationAuthenticationToken ;
180187import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2PushedAuthorizationRequestAuthenticationToken ;
188+ import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2RefreshTokenAuthenticationToken ;
189+ import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2TokenExchangeActor ;
190+ import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2TokenExchangeAuthenticationToken ;
191+ import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2TokenExchangeCompositeAuthenticationToken ;
181192import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2TokenIntrospectionAuthenticationToken ;
182193import org .springframework .security .oauth2 .server .authorization .authentication .OAuth2TokenRevocationAuthenticationToken ;
183194import org .springframework .security .oauth2 .server .authorization .client .RegisteredClient ;
191202import org .springframework .security .oauth2 .server .authorization .settings .ClientSettings ;
192203import org .springframework .security .oauth2 .server .authorization .settings .OAuth2TokenFormat ;
193204import org .springframework .security .oauth2 .server .authorization .settings .TokenSettings ;
205+ import org .springframework .security .oauth2 .server .authorization .token .OAuth2TokenClaimNames ;
194206import org .springframework .security .oauth2 .server .resource .BearerTokenError ;
195207import org .springframework .security .oauth2 .server .resource .BearerTokenErrors ;
196208import org .springframework .security .oauth2 .server .resource .InvalidBearerTokenException ;
251263import org .springframework .security .web .webauthn .api .AuthenticationExtensionsClientOutputs ;
252264import org .springframework .security .web .webauthn .api .AuthenticatorAssertionResponse ;
253265import org .springframework .security .web .webauthn .api .AuthenticatorAttachment ;
266+ import org .springframework .security .web .webauthn .api .AuthenticatorAttestationResponse ;
254267import org .springframework .security .web .webauthn .api .AuthenticatorSelectionCriteria ;
255268import org .springframework .security .web .webauthn .api .AuthenticatorTransport ;
256269import org .springframework .security .web .webauthn .api .Bytes ;
271284import org .springframework .security .web .webauthn .api .PublicKeyCredentialUserEntity ;
272285import org .springframework .security .web .webauthn .api .ResidentKeyRequirement ;
273286import org .springframework .security .web .webauthn .api .TestAuthenticationAssertionResponses ;
287+ import org .springframework .security .web .webauthn .api .TestAuthenticatorAttestationResponses ;
274288import org .springframework .security .web .webauthn .api .TestBytes ;
275289import org .springframework .security .web .webauthn .api .TestPublicKeyCredentialCreationOptions ;
276290import org .springframework .security .web .webauthn .api .TestPublicKeyCredentialRequestOptions ;
@@ -445,6 +459,8 @@ final class SerializationSamples {
445459 generatorByClassName .put (RegisteredClient .class , (r ) -> registeredClient );
446460 generatorByClassName .put (OAuth2Authorization .class , (r ) -> authorization );
447461 generatorByClassName .put (OAuth2Authorization .Token .class , (r ) -> authorization .getAccessToken ());
462+ generatorByClassName .put (OAuth2AuthorizationCode .class ,
463+ (r ) -> new OAuth2AuthorizationCode ("code" , Instant .now (), Instant .now ().plusSeconds (300 )));
448464 generatorByClassName .put (OAuth2AuthorizationConsent .class ,
449465 (r ) -> OAuth2AuthorizationConsent .withId ("registeredClientId" , "principalName" )
450466 .scope ("scope1" )
@@ -470,6 +486,58 @@ final class SerializationSamples {
470486 authenticationToken .setDetails (details );
471487 return authenticationToken ;
472488 });
489+ generatorByClassName .put (
490+ org .springframework .security .oauth2 .server .authorization .authentication .OAuth2AuthorizationCodeAuthenticationToken .class ,
491+ (r ) -> {
492+ org .springframework .security .oauth2 .server .authorization .authentication .OAuth2AuthorizationCodeAuthenticationToken token = new org .springframework .security .oauth2 .server .authorization .authentication .OAuth2AuthorizationCodeAuthenticationToken (
493+ "code" , principal , "https://localhost/callback" , Map .of ("custom_param" , "custom_value" ));
494+ token .setDetails (details );
495+ return token ;
496+ });
497+ generatorByClassName .put (OAuth2AuthorizationCodeRequestAuthenticationException .class , (r ) -> {
498+ OAuth2AuthorizationCodeRequestAuthenticationToken authToken = new OAuth2AuthorizationCodeRequestAuthenticationToken (
499+ "https://localhost/authorize" , "clientId" , principal , "https://localhost/callback" , "state" ,
500+ authorizationRequest .getScopes (), authorizationRequest .getAdditionalParameters ());
501+ return new OAuth2AuthorizationCodeRequestAuthenticationException (
502+ new OAuth2Error ("invalid_request" , "Missing required parameter" , "https://example.com/error" ),
503+ authToken );
504+ });
505+ generatorByClassName .put (OAuth2ClientCredentialsAuthenticationToken .class , (r ) -> {
506+ OAuth2ClientCredentialsAuthenticationToken token = new OAuth2ClientCredentialsAuthenticationToken (principal ,
507+ Set .of ("scope1" , "scope2" ), Map .of ("custom_param" , "custom_value" ));
508+ token .setDetails (details );
509+ return token ;
510+ });
511+ generatorByClassName .put (OAuth2DeviceCodeAuthenticationToken .class , (r ) -> {
512+ OAuth2DeviceCodeAuthenticationToken token = new OAuth2DeviceCodeAuthenticationToken ("device-code" ,
513+ principal , Map .of ("custom_param" , "custom_value" ));
514+ token .setDetails (details );
515+ return token ;
516+ });
517+ generatorByClassName .put (OAuth2RefreshTokenAuthenticationToken .class , (r ) -> {
518+ OAuth2RefreshTokenAuthenticationToken token = new OAuth2RefreshTokenAuthenticationToken ("refresh-token" ,
519+ principal , Set .of ("scope1" , "scope2" ), Map .of ("custom_param" , "custom_value" ));
520+ token .setDetails (details );
521+ return token ;
522+ });
523+ generatorByClassName .put (OAuth2TokenExchangeAuthenticationToken .class , (r ) -> {
524+ OAuth2TokenExchangeAuthenticationToken token = new OAuth2TokenExchangeAuthenticationToken (
525+ "urn:ietf:params:oauth:token-type:access_token" , "subject-token" ,
526+ "urn:ietf:params:oauth:token-type:jwt" , principal , "actor-token" ,
527+ "urn:ietf:params:oauth:token-type:jwt" , Set .of ("https://resource.example.com" ), Set .of ("audience" ),
528+ Set .of ("scope1" ), Map .of ("custom_param" , "custom_value" ));
529+ token .setDetails (details );
530+ return token ;
531+ });
532+ OAuth2TokenExchangeActor actor = new OAuth2TokenExchangeActor (Map .of (OAuth2TokenClaimNames .ISS ,
533+ "https://issuer.example.com" , OAuth2TokenClaimNames .SUB , "actor-subject" ));
534+ generatorByClassName .put (OAuth2TokenExchangeActor .class , (r ) -> actor );
535+ generatorByClassName .put (OAuth2TokenExchangeCompositeAuthenticationToken .class , (r ) -> {
536+ AbstractAuthenticationToken token = new OAuth2TokenExchangeCompositeAuthenticationToken (authentication ,
537+ List .of (actor ));
538+ token .setDetails (details );
539+ return token ;
540+ });
473541 generatorByClassName .put (OAuth2AuthorizationConsentAuthenticationToken .class , (r ) -> {
474542 OAuth2AuthorizationConsentAuthenticationToken authenticationToken = new OAuth2AuthorizationConsentAuthenticationToken (
475543 "authorizationUri" , "clientId" , principal , "state" , authorizationRequest .getScopes (),
@@ -685,6 +753,12 @@ final class SerializationSamples {
685753 generatorByClassName .put (AuthorizationDecision .class , (r ) -> new AuthorizationDecision (true ));
686754 generatorByClassName .put (AuthorityAuthorizationDecision .class ,
687755 (r ) -> new AuthorityAuthorizationDecision (true , AuthorityUtils .createAuthorityList ("ROLE_USER" )));
756+ RequiredFactor factor = RequiredFactor .withAuthority ("authority" ).validDuration (Duration .ofSeconds (5 )).build ();
757+ generatorByClassName .put (RequiredFactor .class , (r ) -> factor );
758+ RequiredFactorError error = RequiredFactorError .createMissing (factor );
759+ generatorByClassName .put (RequiredFactorError .class , (r ) -> error );
760+ generatorByClassName .put (FactorAuthorizationDecision .class ,
761+ (r ) -> new FactorAuthorizationDecision (List .of (error )));
688762 generatorByClassName .put (CycleInRoleHierarchyException .class , (r ) -> new CycleInRoleHierarchyException ());
689763 generatorByClassName .put (AuthorizationEvent .class ,
690764 (r ) -> new AuthorizationEvent (new SerializableSupplier <>(authentication ), "source" ,
@@ -875,6 +949,8 @@ final class SerializationSamples {
875949 generatorByClassName .put (CredentialPropertiesOutput .class , (o ) -> credentialOutput );
876950 generatorByClassName .put (ImmutableAuthenticationExtensionsClientOutputs .class , (o ) -> outputs );
877951 generatorByClassName .put (AuthenticatorAssertionResponse .class , (r ) -> response );
952+ generatorByClassName .put (AuthenticatorAttestationResponse .class ,
953+ (r ) -> TestAuthenticatorAttestationResponses .createAuthenticatorAttestationResponse ().build ());
878954 generatorByClassName .put (RelyingPartyAuthenticationRequest .class , (r ) -> authRequest );
879955 generatorByClassName .put (PublicKeyCredential .class , (r ) -> credential );
880956 generatorByClassName .put (WebAuthnAuthenticationRequestToken .class , (r ) -> requestToken );
0 commit comments