@@ -30,6 +30,7 @@ import org.springframework.security.core.userdetails.User
3030import  org.springframework.security.core.userdetails.UserDetailsService 
3131import  org.springframework.security.provisioning.InMemoryUserDetailsManager 
3232import  org.springframework.security.web.SecurityFilterChain 
33+ import  org.springframework.security.web.webauthn.registration.HttpSessionPublicKeyCredentialCreationOptionsRepository 
3334import  org.springframework.test.web.servlet.MockMvc 
3435import  org.springframework.test.web.servlet.get 
3536import  org.springframework.test.web.servlet.post 
@@ -58,6 +59,16 @@ class WebAuthnDslTests {
5859                }
5960    }
6061
62+     @Test
63+     fun  `explicit PublicKeyCredentialCreationOptionsRepository` 
64+         this .spring.register(ExplicitPublicKeyCredentialCreationOptionsRepositoryConfig ::class .java).autowire()
65+ 
66+         this .mockMvc.post(" /test1" 
67+             .andExpect {
68+                 status { isForbidden() }
69+             }
70+     }
71+ 
6172    @Test
6273    fun  `webauthn and formLogin configured with default registration page` 
6374        spring.register(DefaultWebauthnConfig ::class .java).autowire()
@@ -128,6 +139,33 @@ class WebAuthnDslTests {
128139        }
129140    }
130141
142+     @Configuration
143+     @EnableWebSecurity
144+     open  class  ExplicitPublicKeyCredentialCreationOptionsRepositoryConfig  {
145+         @Bean
146+         open  fun  securityFilterChain (http :  HttpSecurity ): SecurityFilterChain  {
147+             http {
148+                 webAuthn {
149+                     rpName =  " Spring Security Relying Party" 
150+                     rpId =  " example.com" 
151+                     allowedOrigins =  setOf (" https://example.com" 
152+                     creationOptionsRepository =  HttpSessionPublicKeyCredentialCreationOptionsRepository ()
153+                 }
154+             }
155+             return  http.build()
156+         }
157+ 
158+         @Bean
159+         open  fun  userDetailsService (): UserDetailsService  {
160+             val  userDetails =  User .withDefaultPasswordEncoder()
161+                 .username(" rod" 
162+                 .password(" password" 
163+                 .roles(" USER" 
164+                 .build()
165+             return  InMemoryUserDetailsManager (userDetails)
166+         }
167+     }
168+ 
131169    @Configuration
132170    @EnableWebSecurity
133171    open  class  WebauthnConfig  {
0 commit comments