Skip to content

Commit

Permalink
Add HttpMessageConverter WebAuthnDsl Support
Browse files Browse the repository at this point in the history
Issue gh-16397
  • Loading branch information
rwinch committed Jan 18, 2025
1 parent 683f1f4 commit a2abe3c
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.springframework.security.config.annotation.web

import org.springframework.http.converter.HttpMessageConverter
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.config.annotation.web.configurers.WebAuthnConfigurer
import org.springframework.security.web.webauthn.registration.PublicKeyCredentialCreationOptionsRepository
Expand All @@ -37,6 +38,7 @@ class WebAuthnDsl {
var allowedOrigins: Set<String>? = null
var disableDefaultRegistrationPage: Boolean? = false
var creationOptionsRepository: PublicKeyCredentialCreationOptionsRepository? = null
var messageConverter: HttpMessageConverter<Any>? = null

internal fun get(): (WebAuthnConfigurer<HttpSecurity>) -> Unit {
return { webAuthn ->
Expand All @@ -45,6 +47,7 @@ class WebAuthnDsl {
allowedOrigins?.also { webAuthn.allowedOrigins(allowedOrigins) }
disableDefaultRegistrationPage?.also { webAuthn.disableDefaultRegistrationPage(disableDefaultRegistrationPage!!) }
creationOptionsRepository?.also { webAuthn.creationOptionsRepository(creationOptionsRepository) }
messageConverter?.also { webAuthn.messageConverter(messageConverter) }
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import org.junit.jupiter.api.extension.ExtendWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
import org.springframework.security.config.test.SpringTestContext
Expand Down Expand Up @@ -69,6 +70,16 @@ class WebAuthnDslTests {
}
}

@Test
fun `explicit HttpMessageConverter`() {
this.spring.register(ExplicitHttpMessageConverterConfig::class.java).autowire()

this.mockMvc.post("/test1")
.andExpect {
status { isForbidden() }
}
}

@Test
fun `webauthn and formLogin configured with default registration page`() {
spring.register(DefaultWebauthnConfig::class.java).autowire()
Expand Down Expand Up @@ -166,6 +177,33 @@ class WebAuthnDslTests {
}
}

@Configuration
@EnableWebSecurity
open class ExplicitHttpMessageConverterConfig {
@Bean
open fun securityFilterChain(http: HttpSecurity): SecurityFilterChain {
http {
webAuthn {
rpName = "Spring Security Relying Party"
rpId = "example.com"
allowedOrigins = setOf("https://example.com")
messageConverter = MappingJackson2HttpMessageConverter()
}
}
return http.build()
}

@Bean
open fun userDetailsService(): UserDetailsService {
val userDetails = User.withDefaultPasswordEncoder()
.username("rod")
.password("password")
.roles("USER")
.build()
return InMemoryUserDetailsManager(userDetails)
}
}

@Configuration
@EnableWebSecurity
open class WebauthnConfig {
Expand Down

0 comments on commit a2abe3c

Please sign in to comment.