Skip to content

Commit 9ae2aa1

Browse files
committed
Make PublicKeyCredentialCreationOptions Serializable
Closes gh-16431 Signed-off-by: Mohammad Amin Pahlevani <[email protected]>
1 parent 0d5f42f commit 9ae2aa1

17 files changed

+117
-31
lines changed

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

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.io.Serializable;
2121
import java.lang.reflect.Field;
2222
import java.security.Principal;
23+
import java.time.Duration;
2324
import java.time.Instant;
2425
import java.util.Collection;
2526
import java.util.Date;
@@ -245,32 +246,11 @@
245246
import org.springframework.security.web.server.firewall.ServerExchangeRejectedException;
246247
import org.springframework.security.web.session.HttpSessionCreatedEvent;
247248
import org.springframework.security.web.session.HttpSessionIdChangedEvent;
248-
import org.springframework.security.web.webauthn.api.AuthenticationExtensionsClientInputs;
249-
import org.springframework.security.web.webauthn.api.AuthenticationExtensionsClientOutputs;
250-
import org.springframework.security.web.webauthn.api.AuthenticatorAssertionResponse;
251-
import org.springframework.security.web.webauthn.api.AuthenticatorAttachment;
252-
import org.springframework.security.web.webauthn.api.AuthenticatorTransport;
253-
import org.springframework.security.web.webauthn.api.Bytes;
254-
import org.springframework.security.web.webauthn.api.CredProtectAuthenticationExtensionsClientInput;
255-
import org.springframework.security.web.webauthn.api.CredentialPropertiesOutput;
256-
import org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientInput;
257-
import org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientInputs;
258-
import org.springframework.security.web.webauthn.api.ImmutableAuthenticationExtensionsClientOutputs;
259-
import org.springframework.security.web.webauthn.api.ImmutablePublicKeyCredentialUserEntity;
260-
import org.springframework.security.web.webauthn.api.PublicKeyCredential;
261-
import org.springframework.security.web.webauthn.api.PublicKeyCredentialDescriptor;
262-
import org.springframework.security.web.webauthn.api.PublicKeyCredentialRequestOptions;
263-
import org.springframework.security.web.webauthn.api.PublicKeyCredentialType;
264-
import org.springframework.security.web.webauthn.api.PublicKeyCredentialUserEntity;
265-
import org.springframework.security.web.webauthn.api.TestAuthenticationAssertionResponses;
266-
import org.springframework.security.web.webauthn.api.TestBytes;
267-
import org.springframework.security.web.webauthn.api.TestPublicKeyCredentialRequestOptions;
268-
import org.springframework.security.web.webauthn.api.TestPublicKeyCredentialUserEntities;
269-
import org.springframework.security.web.webauthn.api.TestPublicKeyCredentials;
270-
import org.springframework.security.web.webauthn.api.UserVerificationRequirement;
249+
import org.springframework.security.web.webauthn.api.*;
271250
import org.springframework.security.web.webauthn.authentication.WebAuthnAuthentication;
272251
import org.springframework.security.web.webauthn.authentication.WebAuthnAuthenticationRequestToken;
273252
import org.springframework.security.web.webauthn.management.RelyingPartyAuthenticationRequest;
253+
import org.springframework.security.web.webauthn.management.TestPublicKeyCredentialRpEntities;
274254
import org.springframework.util.ReflectionUtils;
275255

276256
final class SerializationSamples {
@@ -879,6 +859,37 @@ final class SerializationSamples {
879859
generatorByClassName.put(CredentialPropertiesOutput.ExtensionOutput.class,
880860
(r) -> new CredentialPropertiesOutput(true).getOutput());
881861

862+
AttestationConveyancePreference attestationConveyancePreference = AttestationConveyancePreference.DIRECT;
863+
ResidentKeyRequirement residentKeyRequirement = ResidentKeyRequirement.REQUIRED;
864+
AuthenticatorSelectionCriteria authenticatorSelectionCriteria = AuthenticatorSelectionCriteria.builder()
865+
.authenticatorAttachment(AuthenticatorAttachment.PLATFORM)
866+
.residentKey(residentKeyRequirement)
867+
.userVerification(UserVerificationRequirement.REQUIRED)
868+
.build();
869+
PublicKeyCredentialParameters publicKeyCredentialParameters = PublicKeyCredentialParameters.RS256;
870+
PublicKeyCredentialRpEntity publicKeyCredentialRpEntity = TestPublicKeyCredentialRpEntities.createRpEntity().build();
871+
872+
generatorByClassName.put(AttestationConveyancePreference.class, (r) -> attestationConveyancePreference);
873+
generatorByClassName.put(ResidentKeyRequirement.class, (r) -> residentKeyRequirement);
874+
generatorByClassName.put(AuthenticatorSelectionCriteria.class, (r) -> authenticatorSelectionCriteria);
875+
generatorByClassName.put(COSEAlgorithmIdentifier.class, (r -> COSEAlgorithmIdentifier.RS256));
876+
generatorByClassName.put(PublicKeyCredentialParameters.class, (r) -> publicKeyCredentialParameters);
877+
generatorByClassName.put(PublicKeyCredentialRpEntity.class, (r) -> publicKeyCredentialRpEntity);
878+
generatorByClassName.put(PublicKeyCredentialCreationOptions.class, (o) -> TestPublicKeyCredentialCreationOptions.createPublicKeyCredentialCreationOptions()
879+
.extensions(inputs)
880+
.attestation(attestationConveyancePreference)
881+
.authenticatorSelection(authenticatorSelectionCriteria)
882+
.challenge(TestBytes.get())
883+
.excludeCredentials(List.of(descriptor))
884+
.rp(publicKeyCredentialRpEntity)
885+
.pubKeyCredParams(publicKeyCredentialParameters)
886+
.timeout(Duration.ofMinutes(5))
887+
.user(TestPublicKeyCredentialUserEntities.userEntity()
888+
.id(TestBytes.get())
889+
.build())
890+
.build()
891+
);
892+
882893
// One-Time Token
883894
DefaultOneTimeToken oneTimeToken = new DefaultOneTimeToken(UUID.randomUUID().toString(), "user",
884895
Instant.now().plusSeconds(300));

webauthn/src/main/java/org/springframework/security/web/webauthn/api/AttestationConveyancePreference.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
package org.springframework.security.web.webauthn.api;
1818

19+
import java.io.Serial;
20+
import java.io.Serializable;
21+
1922
/**
2023
* <a href="https://www.w3.org/TR/webauthn-3/#webauthn-relying-party">WebAuthn Relying
2124
* Parties</a> may use <a href=
@@ -26,7 +29,10 @@
2629
* @author Rob Winch
2730
* @since 6.4
2831
*/
29-
public final class AttestationConveyancePreference {
32+
public final class AttestationConveyancePreference implements Serializable {
33+
34+
@Serial
35+
private static final long serialVersionUID = -4252430175801658788L;
3036

3137
/**
3238
* The <a href=

webauthn/src/main/java/org/springframework/security/web/webauthn/api/AuthenticatorSelectionCriteria.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
package org.springframework.security.web.webauthn.api;
1818

19+
import java.io.Serial;
20+
import java.io.Serializable;
21+
1922
import org.jspecify.annotations.Nullable;
2023

2124
/**
@@ -33,7 +36,10 @@
3336
* @since 6.4
3437
* @see PublicKeyCredentialCreationOptions#getAuthenticatorSelection()
3538
*/
36-
public final class AuthenticatorSelectionCriteria {
39+
public final class AuthenticatorSelectionCriteria implements Serializable {
40+
41+
@Serial
42+
private static final long serialVersionUID = -5923595063546985635L;
3743

3844
private final @Nullable AuthenticatorAttachment authenticatorAttachment;
3945

0 commit comments

Comments
 (0)