|
42 | 42 | import org.springframework.security.authentication.AnonymousAuthenticationToken;
|
43 | 43 | import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
44 | 44 | import org.springframework.security.core.authority.AuthorityUtils;
|
| 45 | +import org.springframework.security.core.userdetails.PasswordEncodedUser; |
| 46 | +import org.springframework.security.core.userdetails.UserDetails; |
45 | 47 | import org.springframework.security.web.webauthn.api.AuthenticatorAttestationResponse;
|
46 | 48 | import org.springframework.security.web.webauthn.api.AuthenticatorAttestationResponse.AuthenticatorAttestationResponseBuilder;
|
47 | 49 | import org.springframework.security.web.webauthn.api.AuthenticatorSelectionCriteria;
|
|
66 | 68 | import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
|
67 | 69 | import static org.assertj.core.api.Assertions.assertThatRuntimeException;
|
68 | 70 | import static org.mockito.BDDMockito.given;
|
| 71 | +import static org.mockito.Mockito.verifyNoInteractions; |
69 | 72 |
|
70 | 73 | @ExtendWith(MockitoExtension.class)
|
71 | 74 | class Webauthn4jRelyingPartyOperationsTests {
|
@@ -546,15 +549,38 @@ void createCredentialRequestOptionsWhenAnonymousAuthentication() {
|
546 | 549 | .createCredentialRequestOptions(createRequest);
|
547 | 550 |
|
548 | 551 | assertThat(credentialRequestOptions.getAllowCredentials()).isEmpty();
|
| 552 | + // verify anonymous user not saved |
| 553 | + verifyNoInteractions(this.userEntities); |
549 | 554 | }
|
550 | 555 |
|
551 | 556 | @Test
|
552 | 557 | void createCredentialRequestOptionsWhenNullAuthentication() {
|
553 |
| - PublicKeyCredentialRequestOptionsRequest createRequest = new ImmutablePublicKeyCredentialRequestOptionsRequest(null); |
| 558 | + PublicKeyCredentialRequestOptionsRequest createRequest = new ImmutablePublicKeyCredentialRequestOptionsRequest( |
| 559 | + null); |
554 | 560 | PublicKeyCredentialRequestOptions credentialRequestOptions = this.rpOperations
|
555 | 561 | .createCredentialRequestOptions(createRequest);
|
556 | 562 |
|
557 | 563 | 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()); |
558 | 584 | }
|
559 | 585 |
|
560 | 586 | private static AuthenticatorAttestationResponse setFlag(byte... flags) throws Exception {
|
|
0 commit comments