Skip to content

Commit 4314e68

Browse files
committed
Add WebAuthenticationDsl.creationOptionsRepository
Issue gh-16396
1 parent bea2322 commit 4314e68

File tree

2 files changed

+41
-0
lines changed
  • config/src

2 files changed

+41
-0
lines changed

config/src/main/kotlin/org/springframework/security/config/annotation/web/WebAuthnDsl.kt

+3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package org.springframework.security.config.annotation.web
1818

1919
import org.springframework.security.config.annotation.web.builders.HttpSecurity
2020
import org.springframework.security.config.annotation.web.configurers.WebAuthnConfigurer
21+
import org.springframework.security.web.webauthn.registration.PublicKeyCredentialCreationOptionsRepository
2122

2223
/**
2324
* A Kotlin DSL to configure [HttpSecurity] webauthn using idiomatic Kotlin code.
@@ -35,13 +36,15 @@ class WebAuthnDsl {
3536
var rpId: String? = null
3637
var allowedOrigins: Set<String>? = null
3738
var disableDefaultRegistrationPage: Boolean? = false
39+
var creationOptionsRepository: PublicKeyCredentialCreationOptionsRepository? = null
3840

3941
internal fun get(): (WebAuthnConfigurer<HttpSecurity>) -> Unit {
4042
return { webAuthn ->
4143
rpName?.also { webAuthn.rpName(rpName) }
4244
rpId?.also { webAuthn.rpId(rpId) }
4345
allowedOrigins?.also { webAuthn.allowedOrigins(allowedOrigins) }
4446
disableDefaultRegistrationPage?.also { webAuthn.disableDefaultRegistrationPage(disableDefaultRegistrationPage!!) }
47+
creationOptionsRepository?.also { webAuthn.creationOptionsRepository(creationOptionsRepository) }
4548
}
4649
}
4750
}

config/src/test/kotlin/org/springframework/security/config/annotation/web/WebAuthnDslTests.kt

+38
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import org.springframework.security.core.userdetails.User
3030
import org.springframework.security.core.userdetails.UserDetailsService
3131
import org.springframework.security.provisioning.InMemoryUserDetailsManager
3232
import org.springframework.security.web.SecurityFilterChain
33+
import org.springframework.security.web.webauthn.registration.HttpSessionPublicKeyCredentialCreationOptionsRepository
3334
import org.springframework.test.web.servlet.MockMvc
3435
import org.springframework.test.web.servlet.get
3536
import 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

Comments
 (0)