3232import java .nio .file .Paths ;
3333import java .time .Instant ;
3434import java .util .ArrayList ;
35+ import java .util .Collection ;
3536import java .util .Date ;
3637import java .util .HashMap ;
3738import java .util .List ;
5455import org .springframework .context .annotation .ClassPathScanningCandidateComponentProvider ;
5556import org .springframework .core .type .filter .AssignableTypeFilter ;
5657import org .springframework .security .access .intercept .RunAsUserToken ;
58+ import org .springframework .security .authentication .AbstractAuthenticationToken ;
5759import org .springframework .security .authentication .AnonymousAuthenticationToken ;
5860import org .springframework .security .authentication .RememberMeAuthenticationToken ;
5961import org .springframework .security .authentication .TestAuthentication ;
62+ import org .springframework .security .authentication .TestingAuthenticationToken ;
6063import org .springframework .security .authentication .UsernamePasswordAuthenticationToken ;
6164import org .springframework .security .authentication .jaas .JaasAuthenticationToken ;
65+ import org .springframework .security .authentication .ott .OneTimeTokenAuthenticationToken ;
6266import org .springframework .security .cas .authentication .CasAssertionAuthenticationToken ;
6367import org .springframework .security .cas .authentication .CasAuthenticationToken ;
6468import org .springframework .security .cas .authentication .CasServiceTicketAuthenticationToken ;
69+ import org .springframework .security .core .GrantedAuthority ;
6570import org .springframework .security .core .SpringSecurityCoreVersion ;
71+ import org .springframework .security .core .authority .AuthorityUtils ;
6672import org .springframework .security .core .session .ReactiveSessionInformation ;
6773import org .springframework .security .core .session .SessionInformation ;
6874import org .springframework .security .core .userdetails .UserDetails ;
75+ import org .springframework .security .ldap .userdetails .LdapAuthority ;
6976import org .springframework .security .oauth2 .client .OAuth2AuthorizedClient ;
7077import org .springframework .security .oauth2 .client .authentication .OAuth2AuthenticationToken ;
7178import org .springframework .security .oauth2 .client .authentication .OAuth2AuthorizationCodeAuthenticationToken ;
7279import org .springframework .security .oauth2 .client .authentication .OAuth2LoginAuthenticationToken ;
7380import org .springframework .security .oauth2 .client .authentication .TestOAuth2AuthenticationTokens ;
7481import org .springframework .security .oauth2 .client .authentication .TestOAuth2AuthorizationCodeAuthenticationTokens ;
82+ import org .springframework .security .oauth2 .client .oidc .authentication .logout .OidcLogoutToken ;
83+ import org .springframework .security .oauth2 .client .oidc .authentication .logout .TestOidcLogoutTokens ;
84+ import org .springframework .security .oauth2 .client .oidc .session .OidcSessionInformation ;
85+ import org .springframework .security .oauth2 .client .oidc .session .TestOidcSessionInformations ;
7586import org .springframework .security .oauth2 .client .registration .ClientRegistration ;
7687import org .springframework .security .oauth2 .client .registration .TestClientRegistrations ;
88+ import org .springframework .security .oauth2 .core .DefaultOAuth2AuthenticatedPrincipal ;
89+ import org .springframework .security .oauth2 .core .OAuth2AccessToken ;
90+ import org .springframework .security .oauth2 .core .OAuth2AuthenticatedPrincipal ;
91+ import org .springframework .security .oauth2 .core .OAuth2DeviceCode ;
92+ import org .springframework .security .oauth2 .core .OAuth2RefreshToken ;
93+ import org .springframework .security .oauth2 .core .OAuth2UserCode ;
7794import org .springframework .security .oauth2 .core .TestOAuth2AccessTokens ;
7895import org .springframework .security .oauth2 .core .TestOAuth2AuthenticatedPrincipals ;
7996import org .springframework .security .oauth2 .core .endpoint .OAuth2AuthorizationExchange ;
8299import org .springframework .security .oauth2 .core .endpoint .TestOAuth2AuthorizationExchanges ;
83100import org .springframework .security .oauth2 .core .endpoint .TestOAuth2AuthorizationRequests ;
84101import org .springframework .security .oauth2 .core .endpoint .TestOAuth2AuthorizationResponses ;
102+ import org .springframework .security .oauth2 .core .oidc .OidcIdToken ;
85103import org .springframework .security .oauth2 .core .oidc .OidcUserInfo ;
104+ import org .springframework .security .oauth2 .core .oidc .TestOidcIdTokens ;
105+ import org .springframework .security .oauth2 .core .oidc .user .DefaultOidcUser ;
106+ import org .springframework .security .oauth2 .core .oidc .user .OidcUserAuthority ;
107+ import org .springframework .security .oauth2 .core .oidc .user .TestOidcUsers ;
86108import org .springframework .security .oauth2 .core .user .DefaultOAuth2User ;
87109import org .springframework .security .oauth2 .core .user .OAuth2UserAuthority ;
88110import org .springframework .security .oauth2 .core .user .TestOAuth2Users ;
111+ import org .springframework .security .oauth2 .jwt .Jwt ;
89112import org .springframework .security .oauth2 .jwt .TestJwts ;
113+ import org .springframework .security .oauth2 .server .resource .BearerTokenError ;
114+ import org .springframework .security .oauth2 .server .resource .BearerTokenErrors ;
90115import org .springframework .security .oauth2 .server .resource .authentication .BearerTokenAuthentication ;
91116import org .springframework .security .oauth2 .server .resource .authentication .BearerTokenAuthenticationToken ;
92117import org .springframework .security .oauth2 .server .resource .authentication .JwtAuthenticationToken ;
118+ import org .springframework .security .oauth2 .server .resource .introspection .OAuth2IntrospectionAuthenticatedPrincipal ;
93119import org .springframework .security .saml2 .provider .service .authentication .DefaultSaml2AuthenticatedPrincipal ;
120+ import org .springframework .security .saml2 .provider .service .authentication .Saml2Authentication ;
121+ import org .springframework .security .saml2 .provider .service .authentication .Saml2PostAuthenticationRequest ;
122+ import org .springframework .security .saml2 .provider .service .authentication .Saml2RedirectAuthenticationRequest ;
94123import org .springframework .security .saml2 .provider .service .authentication .TestSaml2Authentications ;
124+ import org .springframework .security .saml2 .provider .service .authentication .TestSaml2PostAuthenticationRequests ;
125+ import org .springframework .security .saml2 .provider .service .authentication .TestSaml2RedirectAuthenticationRequests ;
95126import org .springframework .security .web .authentication .WebAuthenticationDetails ;
96127import org .springframework .security .web .authentication .preauth .PreAuthenticatedAuthenticationToken ;
97128
@@ -138,6 +169,17 @@ class SpringSecurityCoreVersionSerializableTests {
138169 (r ) -> new SessionInformation (user , r .alphanumeric (4 ), new Date (1704378933936L )));
139170 generatorByClassName .put (ReactiveSessionInformation .class ,
140171 (r ) -> new ReactiveSessionInformation (user , r .alphanumeric (4 ), Instant .ofEpochMilli (1704378933936L )));
172+ generatorByClassName .put (OAuth2AccessToken .class , (r ) -> TestOAuth2AccessTokens .scopes ("scope" ));
173+ generatorByClassName .put (OAuth2DeviceCode .class ,
174+ (r ) -> new OAuth2DeviceCode ("token" , Instant .now (), Instant .now ()));
175+ generatorByClassName .put (OAuth2RefreshToken .class ,
176+ (r ) -> new OAuth2RefreshToken ("refreshToken" , Instant .now (), Instant .now ()));
177+ generatorByClassName .put (OAuth2UserCode .class ,
178+ (r ) -> new OAuth2UserCode ("token" , Instant .now (), Instant .now ()));
179+ generatorByClassName .put (DefaultOidcUser .class , (r ) -> TestOidcUsers .create ());
180+ generatorByClassName .put (OidcUserAuthority .class ,
181+ (r ) -> new OidcUserAuthority (TestOidcIdTokens .idToken ().build (),
182+ new OidcUserInfo (Map .of ("claim" , "value" )), "claim" ));
141183
142184 // oauth2-client
143185 ClientRegistration .Builder clientRegistrationBuilder = TestClientRegistrations .clientRegistration ();
@@ -167,6 +209,18 @@ class SpringSecurityCoreVersionSerializableTests {
167209 token .setDetails (details );
168210 return token ;
169211 });
212+ generatorByClassName .put (OidcIdToken .class , (r ) -> TestOidcIdTokens .idToken ().build ());
213+ generatorByClassName .put (OidcLogoutToken .class ,
214+ (r ) -> TestOidcLogoutTokens .withSessionId ("issuer" , "sessionId" ).issuedAt (Instant .now ()).build ());
215+ generatorByClassName .put (OidcSessionInformation .class , (r ) -> TestOidcSessionInformations .create ());
216+ generatorByClassName .put (DefaultOAuth2AuthenticatedPrincipal .class , (r ) -> {
217+ OAuth2AuthenticatedPrincipal principal = TestOAuth2AuthenticatedPrincipals .active ();
218+ return new DefaultOAuth2AuthenticatedPrincipal (principal .getName (), principal .getAttributes (),
219+ (Collection <GrantedAuthority >) principal .getAuthorities ());
220+ });
221+
222+ // oauth2-jwt
223+ generatorByClassName .put (Jwt .class , (r ) -> TestJwts .user ());
170224
171225 // oauth2-resource-server
172226 generatorByClassName
@@ -192,6 +246,9 @@ class SpringSecurityCoreVersionSerializableTests {
192246 token .setDetails (details );
193247 return token ;
194248 });
249+ generatorByClassName .put (BearerTokenError .class , (r ) -> BearerTokenErrors .invalidToken ("invalid token" ));
250+ generatorByClassName .put (OAuth2IntrospectionAuthenticatedPrincipal .class ,
251+ (r ) -> TestOAuth2AuthenticatedPrincipals .active ());
195252
196253 // core
197254 generatorByClassName .put (RunAsUserToken .class , (r ) -> {
@@ -215,6 +272,11 @@ class SpringSecurityCoreVersionSerializableTests {
215272 token .setDetails (details );
216273 return token ;
217274 });
275+ generatorByClassName .put (OneTimeTokenAuthenticationToken .class ,
276+ (r ) -> applyDetails (new OneTimeTokenAuthenticationToken ("username" , "token" )));
277+
278+ generatorByClassName .put (TestingAuthenticationToken .class ,
279+ (r ) -> applyDetails (new TestingAuthenticationToken ("username" , "password" )));
218280
219281 // cas
220282 generatorByClassName .put (CasServiceTicketAuthenticationToken .class , (r ) -> {
@@ -234,11 +296,25 @@ class SpringSecurityCoreVersionSerializableTests {
234296 return token ;
235297 });
236298
299+ // ldap
300+ generatorByClassName .put (LdapAuthority .class ,
301+ (r ) -> new LdapAuthority ("USER" , "username" , Map .of ("attribute" , List .of ("value1" , "value2" ))));
302+
237303 // saml2-service-provider
238304 generatorByClassName .put (DefaultSaml2AuthenticatedPrincipal .class ,
239305 (r ) -> TestSaml2Authentications .authentication ().getPrincipal ());
306+ generatorByClassName .put (Saml2Authentication .class ,
307+ (r ) -> applyDetails (TestSaml2Authentications .authentication ()));
308+ generatorByClassName .put (Saml2PostAuthenticationRequest .class ,
309+ (r ) -> TestSaml2PostAuthenticationRequests .create ());
310+ generatorByClassName .put (Saml2RedirectAuthenticationRequest .class ,
311+ (r ) -> TestSaml2RedirectAuthenticationRequests .create ());
240312
241313 // web
314+ generatorByClassName .put (AnonymousAuthenticationToken .class , (r ) -> {
315+ Collection <GrantedAuthority > authorities = AuthorityUtils .createAuthorityList ("ROLE_USER" );
316+ return applyDetails (new AnonymousAuthenticationToken ("key" , "username" , authorities ));
317+ });
242318 generatorByClassName .put (PreAuthenticatedAuthenticationToken .class , (r ) -> {
243319 PreAuthenticatedAuthenticationToken token = new PreAuthenticatedAuthenticationToken (user , "creds" ,
244320 user .getAuthorities ());
@@ -361,6 +437,12 @@ private static InstancioApi<?> instancioWithDefaults(Class<?> clazz) {
361437 return instancio ;
362438 }
363439
440+ private static <T extends AbstractAuthenticationToken > T applyDetails (T authentication ) {
441+ WebAuthenticationDetails details = new WebAuthenticationDetails ("remote" , "sessionId" );
442+ authentication .setDetails (details );
443+ return authentication ;
444+ }
445+
364446 private static String getCurrentVersion () {
365447 String version = System .getProperty ("springSecurityVersion" );
366448 String [] parts = version .split ("\\ ." );
0 commit comments