mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-06-23 12:32:13 +00:00
Merge branch '6.4.x'
- Fix Kotlin DSL webAuthn { } - Add Support disableDefaultRegistrationPage to WebAuthnDsl Closes gh-16403 Closes gh-16404
This commit is contained in:
commit
85b854c61c
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
* Copyright 2002-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -24,20 +24,24 @@ import org.springframework.security.config.annotation.web.configurers.WebAuthnCo
|
||||
* @property rpName the relying party name
|
||||
* @property rpId the relying party id
|
||||
* @property the allowed origins
|
||||
* @property disableDefaultRegistrationPage disable default webauthn registration page
|
||||
* @since 6.4
|
||||
* @author Rob Winch
|
||||
* @author Max Batischev
|
||||
*/
|
||||
@SecurityMarker
|
||||
class WebAuthnDsl {
|
||||
var rpName: String? = null
|
||||
var rpId: String? = null
|
||||
var allowedOrigins: Set<String>? = null
|
||||
var disableDefaultRegistrationPage: Boolean? = false
|
||||
|
||||
internal fun get(): (WebAuthnConfigurer<HttpSecurity>) -> Unit {
|
||||
return { webAuthn -> webAuthn
|
||||
.rpId(rpId)
|
||||
.rpName(rpName)
|
||||
.allowedOrigins(allowedOrigins);
|
||||
return { webAuthn ->
|
||||
rpName?.also { webAuthn.rpName(rpName) }
|
||||
rpId?.also { webAuthn.rpId(rpId) }
|
||||
allowedOrigins?.also { webAuthn.allowedOrigins(allowedOrigins) }
|
||||
disableDefaultRegistrationPage?.also { webAuthn.disableDefaultRegistrationPage(disableDefaultRegistrationPage!!) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2022 the original author or authors.
|
||||
* Copyright 2002-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.security.config.annotation.web
|
||||
|
||||
import org.hamcrest.Matchers
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.extension.ExtendWith
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
@ -30,7 +31,9 @@ import org.springframework.security.core.userdetails.UserDetailsService
|
||||
import org.springframework.security.provisioning.InMemoryUserDetailsManager
|
||||
import org.springframework.security.web.SecurityFilterChain
|
||||
import org.springframework.test.web.servlet.MockMvc
|
||||
import org.springframework.test.web.servlet.get
|
||||
import org.springframework.test.web.servlet.post
|
||||
import org.springframework.test.web.servlet.result.MockMvcResultMatchers
|
||||
|
||||
/**
|
||||
* Tests for [WebAuthnDsl]
|
||||
@ -55,6 +58,76 @@ class WebAuthnDslTests {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `webauthn and formLogin configured with default registration page`() {
|
||||
spring.register(DefaultWebauthnConfig::class.java).autowire()
|
||||
|
||||
this.mockMvc.get("/login/webauthn.js")
|
||||
.andExpect {
|
||||
MockMvcResultMatchers.status().isOk
|
||||
header {
|
||||
string("content-type", "text/javascript;charset=UTF-8")
|
||||
}
|
||||
content {
|
||||
string(Matchers.containsString("async function authenticate("))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `webauthn and formLogin configured with disabled default registration page`() {
|
||||
spring.register(FormLoginAndNoDefaultRegistrationPageConfiguration::class.java).autowire()
|
||||
|
||||
this.mockMvc.get("/login/webauthn.js")
|
||||
.andExpect {
|
||||
MockMvcResultMatchers.status().isOk
|
||||
header {
|
||||
string("content-type", "text/javascript;charset=UTF-8")
|
||||
}
|
||||
content {
|
||||
string(Matchers.containsString("async function authenticate("))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@EnableWebSecurity
|
||||
open class FormLoginAndNoDefaultRegistrationPageConfiguration {
|
||||
@Bean
|
||||
open fun userDetailsService(): UserDetailsService =
|
||||
InMemoryUserDetailsManager()
|
||||
|
||||
|
||||
@Bean
|
||||
open fun securityFilterChain(http: HttpSecurity): SecurityFilterChain {
|
||||
http{
|
||||
formLogin { }
|
||||
webAuthn {
|
||||
disableDefaultRegistrationPage = true
|
||||
}
|
||||
}
|
||||
return http.build()
|
||||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@EnableWebSecurity
|
||||
open class DefaultWebauthnConfig {
|
||||
@Bean
|
||||
open fun userDetailsService(): UserDetailsService =
|
||||
InMemoryUserDetailsManager()
|
||||
|
||||
|
||||
@Bean
|
||||
open fun securityFilterChain(http: HttpSecurity): SecurityFilterChain {
|
||||
http{
|
||||
formLogin { }
|
||||
webAuthn { }
|
||||
}
|
||||
return http.build()
|
||||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@EnableWebSecurity
|
||||
open class WebauthnConfig {
|
||||
|
Loading…
x
Reference in New Issue
Block a user