Skip to content

Commit 8399bc1

Browse files
committed
Fix Serializable tests
Issue gh-17880
1 parent cc71be7 commit 8399bc1

File tree

28 files changed

+171
-0
lines changed

28 files changed

+171
-0
lines changed

config/src/test/java/org/springframework/security/SerializationSamples.java

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.io.IOException;
2020
import java.io.Serializable;
2121
import java.lang.reflect.Field;
22+
import java.security.Principal;
2223
import java.time.Instant;
2324
import java.util.Collection;
2425
import java.util.Date;
@@ -122,6 +123,8 @@
122123
import org.springframework.security.oauth2.client.oidc.session.TestOidcSessionInformations;
123124
import org.springframework.security.oauth2.client.registration.ClientRegistration;
124125
import org.springframework.security.oauth2.client.registration.TestClientRegistrations;
126+
import org.springframework.security.oauth2.core.AuthorizationGrantType;
127+
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
125128
import org.springframework.security.oauth2.core.DefaultOAuth2AuthenticatedPrincipal;
126129
import org.springframework.security.oauth2.core.OAuth2AccessToken;
127130
import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
@@ -156,6 +159,34 @@
156159
import org.springframework.security.oauth2.jwt.JwtException;
157160
import org.springframework.security.oauth2.jwt.JwtValidationException;
158161
import org.springframework.security.oauth2.jwt.TestJwts;
162+
import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
163+
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationConsent;
164+
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationServerMetadata;
165+
import org.springframework.security.oauth2.server.authorization.OAuth2TokenIntrospection;
166+
import org.springframework.security.oauth2.server.authorization.OAuth2TokenType;
167+
import org.springframework.security.oauth2.server.authorization.TestOAuth2Authorizations;
168+
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2AccessTokenAuthenticationToken;
169+
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2AuthorizationCodeRequestAuthenticationToken;
170+
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2AuthorizationConsentAuthenticationToken;
171+
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2AuthorizationGrantAuthenticationToken;
172+
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2ClientAuthenticationToken;
173+
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2DeviceAuthorizationConsentAuthenticationToken;
174+
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2DeviceAuthorizationRequestAuthenticationToken;
175+
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2DeviceVerificationAuthenticationToken;
176+
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2PushedAuthorizationRequestAuthenticationToken;
177+
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2TokenIntrospectionAuthenticationToken;
178+
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2TokenRevocationAuthenticationToken;
179+
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
180+
import org.springframework.security.oauth2.server.authorization.client.TestRegisteredClients;
181+
import org.springframework.security.oauth2.server.authorization.oidc.OidcClientRegistration;
182+
import org.springframework.security.oauth2.server.authorization.oidc.OidcProviderConfiguration;
183+
import org.springframework.security.oauth2.server.authorization.oidc.authentication.OidcClientRegistrationAuthenticationToken;
184+
import org.springframework.security.oauth2.server.authorization.oidc.authentication.OidcLogoutAuthenticationToken;
185+
import org.springframework.security.oauth2.server.authorization.oidc.authentication.OidcUserInfoAuthenticationToken;
186+
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
187+
import org.springframework.security.oauth2.server.authorization.settings.ClientSettings;
188+
import org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat;
189+
import org.springframework.security.oauth2.server.authorization.settings.TokenSettings;
159190
import org.springframework.security.oauth2.server.resource.BearerTokenError;
160191
import org.springframework.security.oauth2.server.resource.BearerTokenErrors;
161192
import org.springframework.security.oauth2.server.resource.InvalidBearerTokenException;
@@ -374,6 +405,146 @@ final class SerializationSamples {
374405
generatorByClassName.put(DPoPAuthenticationToken.class,
375406
(r) -> applyDetails(new DPoPAuthenticationToken("token", "proof", "method", "uri")));
376407

408+
// oauth2-authorization-server
409+
RegisteredClient registeredClient = TestRegisteredClients.registeredClient().build();
410+
OAuth2Authorization authorization = TestOAuth2Authorizations.authorization(registeredClient).build();
411+
OAuth2AuthorizationRequest authorizationRequest = authorization
412+
.getAttribute(OAuth2AuthorizationRequest.class.getName());
413+
Authentication principal = authorization.getAttribute(Principal.class.getName());
414+
generatorByClassName.put(RegisteredClient.class, (r) -> registeredClient);
415+
generatorByClassName.put(OAuth2Authorization.class, (r) -> authorization);
416+
generatorByClassName.put(OAuth2Authorization.Token.class, (r) -> authorization.getAccessToken());
417+
generatorByClassName.put(OAuth2AuthorizationConsent.class,
418+
(r) -> OAuth2AuthorizationConsent.withId("registeredClientId", "principalName")
419+
.scope("scope1")
420+
.scope("scope2")
421+
.build());
422+
generatorByClassName.put(OAuth2AuthorizationCodeRequestAuthenticationToken.class, (r) -> {
423+
OAuth2AuthorizationCodeRequestAuthenticationToken authenticationToken = new OAuth2AuthorizationCodeRequestAuthenticationToken(
424+
"authorizationUri", "clientId", principal, "redirectUri", "state", authorizationRequest.getScopes(),
425+
authorizationRequest.getAdditionalParameters());
426+
authenticationToken.setDetails(details);
427+
return authenticationToken;
428+
});
429+
generatorByClassName.put(OAuth2PushedAuthorizationRequestAuthenticationToken.class, (r) -> {
430+
OAuth2PushedAuthorizationRequestAuthenticationToken authenticationToken = new OAuth2PushedAuthorizationRequestAuthenticationToken(
431+
"authorizationUri", "clientId", principal, "redirectUri", "state", authorizationRequest.getScopes(),
432+
authorizationRequest.getAdditionalParameters());
433+
authenticationToken.setDetails(details);
434+
return authenticationToken;
435+
});
436+
generatorByClassName.put(OAuth2AuthorizationGrantAuthenticationToken.class, (r) -> {
437+
org.springframework.security.oauth2.server.authorization.authentication.OAuth2AuthorizationCodeAuthenticationToken authenticationToken = new org.springframework.security.oauth2.server.authorization.authentication.OAuth2AuthorizationCodeAuthenticationToken(
438+
"code", principal, "redirectUri", new HashMap<>());
439+
authenticationToken.setDetails(details);
440+
return authenticationToken;
441+
});
442+
generatorByClassName.put(OAuth2AuthorizationConsentAuthenticationToken.class, (r) -> {
443+
OAuth2AuthorizationConsentAuthenticationToken authenticationToken = new OAuth2AuthorizationConsentAuthenticationToken(
444+
"authorizationUri", "clientId", principal, "state", authorizationRequest.getScopes(),
445+
authorizationRequest.getAdditionalParameters());
446+
authenticationToken.setDetails(details);
447+
return authenticationToken;
448+
});
449+
generatorByClassName.put(OAuth2DeviceAuthorizationRequestAuthenticationToken.class, (r) -> {
450+
OAuth2DeviceAuthorizationRequestAuthenticationToken authenticationToken = new OAuth2DeviceAuthorizationRequestAuthenticationToken(
451+
principal, "authorizationUri", authorizationRequest.getScopes(),
452+
authorizationRequest.getAdditionalParameters());
453+
authenticationToken.setDetails(details);
454+
return authenticationToken;
455+
});
456+
generatorByClassName.put(OAuth2DeviceAuthorizationConsentAuthenticationToken.class, (r) -> {
457+
OAuth2DeviceAuthorizationConsentAuthenticationToken authenticationToken = new OAuth2DeviceAuthorizationConsentAuthenticationToken(
458+
"authorizationUri", "clientId", principal, "userCode", "state", authorizationRequest.getScopes(),
459+
authorizationRequest.getAdditionalParameters());
460+
authenticationToken.setDetails(details);
461+
return authenticationToken;
462+
});
463+
generatorByClassName.put(OAuth2DeviceVerificationAuthenticationToken.class, (r) -> {
464+
OAuth2DeviceVerificationAuthenticationToken authenticationToken = new OAuth2DeviceVerificationAuthenticationToken(
465+
principal, "userCode", new HashMap<>());
466+
authenticationToken.setDetails(details);
467+
return authenticationToken;
468+
});
469+
generatorByClassName.put(OAuth2TokenIntrospectionAuthenticationToken.class, (r) -> {
470+
OAuth2TokenIntrospectionAuthenticationToken authenticationToken = new OAuth2TokenIntrospectionAuthenticationToken(
471+
"token", principal, "tokenTypeHint", new HashMap<>());
472+
authenticationToken.setDetails(details);
473+
return authenticationToken;
474+
});
475+
generatorByClassName.put(OAuth2TokenRevocationAuthenticationToken.class, (r) -> {
476+
OAuth2TokenRevocationAuthenticationToken authenticationToken = new OAuth2TokenRevocationAuthenticationToken(
477+
"token", principal, "tokenTypeHint");
478+
authenticationToken.setDetails(details);
479+
return authenticationToken;
480+
});
481+
OidcClientRegistration oidcClientRegistration = OidcClientRegistration.builder()
482+
.grantType(AuthorizationGrantType.AUTHORIZATION_CODE.getValue())
483+
.scope("scope1")
484+
.redirectUri("https://localhost/oauth2/callback")
485+
.build();
486+
generatorByClassName.put(OidcClientRegistration.class, (r) -> oidcClientRegistration);
487+
generatorByClassName.put(OidcClientRegistrationAuthenticationToken.class, (r) -> {
488+
OidcClientRegistrationAuthenticationToken authenticationToken = new OidcClientRegistrationAuthenticationToken(
489+
principal, oidcClientRegistration);
490+
authenticationToken.setDetails(details);
491+
return authenticationToken;
492+
});
493+
generatorByClassName.put(OidcUserInfoAuthenticationToken.class, (r) -> {
494+
OidcUserInfo userInfo = OidcUserInfo.builder().subject("subject").name("name").build();
495+
OidcUserInfoAuthenticationToken authenticationToken = new OidcUserInfoAuthenticationToken(principal,
496+
userInfo);
497+
authenticationToken.setDetails(details);
498+
return authenticationToken;
499+
});
500+
generatorByClassName.put(OidcLogoutAuthenticationToken.class, (r) -> {
501+
OidcIdToken idToken = OidcIdToken.withTokenValue("tokenValue")
502+
.issuedAt(Instant.now())
503+
.expiresAt(Instant.now().plusSeconds(60))
504+
.build();
505+
OidcLogoutAuthenticationToken authenticationToken = new OidcLogoutAuthenticationToken(idToken, principal,
506+
"sessionId", "clientId", "postLogoutRedirectUri", "state");
507+
authenticationToken.setDetails(details);
508+
return authenticationToken;
509+
});
510+
generatorByClassName.put(OAuth2ClientAuthenticationToken.class, (r) -> {
511+
OAuth2ClientAuthenticationToken authenticationToken = new OAuth2ClientAuthenticationToken(registeredClient,
512+
ClientAuthenticationMethod.CLIENT_SECRET_BASIC, "credentials");
513+
authenticationToken.setDetails(details);
514+
return authenticationToken;
515+
});
516+
generatorByClassName.put(OAuth2TokenIntrospection.class,
517+
(r) -> OAuth2TokenIntrospection.builder().active(true).clientId("clientId").build());
518+
generatorByClassName.put(OAuth2AccessTokenAuthenticationToken.class, (r) -> {
519+
OAuth2AccessTokenAuthenticationToken authenticationToken = new OAuth2AccessTokenAuthenticationToken(
520+
registeredClient, principal, authorization.getAccessToken().getToken());
521+
authenticationToken.setDetails(details);
522+
return authenticationToken;
523+
});
524+
generatorByClassName.put(OAuth2AuthorizationServerMetadata.class,
525+
(r) -> OAuth2AuthorizationServerMetadata.builder()
526+
.issuer("https://localhost")
527+
.authorizationEndpoint("https://localhost/oauth2/authorize")
528+
.tokenEndpoint("https://localhost/oauth2/token")
529+
.responseType("code")
530+
.build());
531+
generatorByClassName.put(OidcProviderConfiguration.class,
532+
(r) -> OidcProviderConfiguration.builder()
533+
.issuer("https://localhost")
534+
.authorizationEndpoint("https://localhost/oauth2/authorize")
535+
.tokenEndpoint("https://localhost/oauth2/token")
536+
.jwkSetUrl("https://localhost/oauth2/jwks")
537+
.responseType("code")
538+
.subjectType("subjectType")
539+
.idTokenSigningAlgorithm("RS256")
540+
.build());
541+
generatorByClassName.put(OAuth2TokenType.class, (r) -> OAuth2TokenType.ACCESS_TOKEN);
542+
generatorByClassName.put(OAuth2TokenFormat.class, (r) -> OAuth2TokenFormat.SELF_CONTAINED);
543+
generatorByClassName.put(AuthorizationServerSettings.class,
544+
(r) -> AuthorizationServerSettings.builder().build());
545+
generatorByClassName.put(ClientSettings.class, (r) -> ClientSettings.builder().build());
546+
generatorByClassName.put(TokenSettings.class, (r) -> TokenSettings.builder().build());
547+
377548
// config
378549
generatorByClassName.put(AlreadyBuiltException.class, (r) -> new AlreadyBuiltException("message"));
379550

0 commit comments

Comments
 (0)