Skip to content

Commit a6b5c05

Browse files
committed
Additional WebAuthn4jRelyingPartyOperationTests
- verify that anonymous users not saved - verify that when user found the CredentialRecord is allowed Issue spring-projectsgh-16385
1 parent 9c05447 commit a6b5c05

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

web/src/test/java/org/springframework/security/web/webauthn/management/Webauthn4jRelyingPartyOperationsTests.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
import org.springframework.security.authentication.AnonymousAuthenticationToken;
4343
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
4444
import org.springframework.security.core.authority.AuthorityUtils;
45+
import org.springframework.security.core.userdetails.PasswordEncodedUser;
46+
import org.springframework.security.core.userdetails.UserDetails;
4547
import org.springframework.security.web.webauthn.api.AuthenticatorAttestationResponse;
4648
import org.springframework.security.web.webauthn.api.AuthenticatorAttestationResponse.AuthenticatorAttestationResponseBuilder;
4749
import org.springframework.security.web.webauthn.api.AuthenticatorSelectionCriteria;
@@ -66,6 +68,7 @@
6668
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
6769
import static org.assertj.core.api.Assertions.assertThatRuntimeException;
6870
import static org.mockito.BDDMockito.given;
71+
import static org.mockito.Mockito.verifyNoInteractions;
6972

7073
@ExtendWith(MockitoExtension.class)
7174
class Webauthn4jRelyingPartyOperationsTests {
@@ -546,15 +549,38 @@ void createCredentialRequestOptionsWhenAnonymousAuthentication() {
546549
.createCredentialRequestOptions(createRequest);
547550

548551
assertThat(credentialRequestOptions.getAllowCredentials()).isEmpty();
552+
// verify anonymous user not saved
553+
verifyNoInteractions(this.userEntities);
549554
}
550555

551556
@Test
552557
void createCredentialRequestOptionsWhenNullAuthentication() {
553-
PublicKeyCredentialRequestOptionsRequest createRequest = new ImmutablePublicKeyCredentialRequestOptionsRequest(null);
558+
PublicKeyCredentialRequestOptionsRequest createRequest = new ImmutablePublicKeyCredentialRequestOptionsRequest(
559+
null);
554560
PublicKeyCredentialRequestOptions credentialRequestOptions = this.rpOperations
555561
.createCredentialRequestOptions(createRequest);
556562

557563
assertThat(credentialRequestOptions.getAllowCredentials()).isEmpty();
564+
// verify anonymous user not saved
565+
verifyNoInteractions(this.userEntities);
566+
}
567+
568+
@Test
569+
void createCredentialRequestOptionsWhenAuthenticated() {
570+
UserDetails user = PasswordEncodedUser.user();
571+
UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(user, null,
572+
user.getAuthorities());
573+
PublicKeyCredentialUserEntity userEntity = TestPublicKeyCredentialUserEntity.userEntity().build();
574+
CredentialRecord credentialRecord = TestCredentialRecord.userCredential().build();
575+
given(this.userEntities.findByUsername(user.getUsername())).willReturn(userEntity);
576+
given(this.userCredentials.findByUserId(userEntity.getId())).willReturn(Arrays.asList(credentialRecord));
577+
PublicKeyCredentialRequestOptionsRequest createRequest = new ImmutablePublicKeyCredentialRequestOptionsRequest(
578+
auth);
579+
PublicKeyCredentialRequestOptions credentialRequestOptions = this.rpOperations
580+
.createCredentialRequestOptions(createRequest);
581+
582+
assertThat(credentialRequestOptions.getAllowCredentials()).extracting(PublicKeyCredentialDescriptor::getId)
583+
.containsExactly(credentialRecord.getCredentialId());
558584
}
559585

560586
private static AuthenticatorAttestationResponse setFlag(byte... flags) throws Exception {

0 commit comments

Comments
 (0)