Init auth server with stubs

This commit is contained in:
kashiuno
2025-01-07 10:14:52 +03:00
commit b031d7f2f8
12 changed files with 573 additions and 0 deletions
@@ -0,0 +1,11 @@
package ru.vyatsu.qr_access_auth_server
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class QrAccessAuthServerApplication
fun main(args: Array<String>) {
runApplication<QrAccessAuthServerApplication>(*args)
}
@@ -0,0 +1,113 @@
package ru.vyatsu.qr_access_auth_server
import com.nimbusds.jose.jwk.JWKSet
import com.nimbusds.jose.jwk.RSAKey
import com.nimbusds.jose.jwk.source.ImmutableJWKSet
import com.nimbusds.jose.jwk.source.JWKSource
import com.nimbusds.jose.proc.SecurityContext
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.core.annotation.Order
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
import org.springframework.security.core.userdetails.User
import org.springframework.security.core.userdetails.UserDetailsService
import org.springframework.security.oauth2.core.AuthorizationGrantType
import org.springframework.security.oauth2.core.ClientAuthenticationMethod
import org.springframework.security.oauth2.jwt.JwtDecoder
import org.springframework.security.oauth2.server.authorization.client.InMemoryRegisteredClientRepository
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient
import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository
import org.springframework.security.oauth2.server.authorization.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration
import org.springframework.security.oauth2.server.authorization.config.annotation.web.configurers.OAuth2AuthorizationServerConfigurer
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings
import org.springframework.security.provisioning.InMemoryUserDetailsManager
import org.springframework.security.web.SecurityFilterChain
import java.security.KeyPair
import java.security.KeyPairGenerator
import java.security.interfaces.RSAPrivateKey
import java.security.interfaces.RSAPublicKey
import java.util.*
@Configuration
@EnableWebSecurity(debug = true)
class SecurityConfig {
@Bean
@Order(1)
@Throws(Exception::class)
fun authorizationServerSecurityFilterChain(http: HttpSecurity): SecurityFilterChain {
val authorizationServer = OAuth2AuthorizationServerConfigurer.authorizationServer()
http
.securityMatcher(authorizationServer.endpointsMatcher)
.with(authorizationServer) {}
.authorizeHttpRequests { it.anyRequest().authenticated() }
return http.build()
}
@Bean
@Order(2)
@Throws(Exception::class)
fun defaultSecurityFilterChain(http: HttpSecurity): SecurityFilterChain {
http.csrf { it.disable() }
.authorizeHttpRequests { it.anyRequest().authenticated() }
return http.build()
}
@Bean
fun userDetailsService(): UserDetailsService {
return InMemoryUserDetailsManager(
User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build()
)
}
@Bean
fun registeredClientRepository(): RegisteredClientRepository {
val testClient = RegisteredClient.withId(UUID.randomUUID().toString())
.clientId("test-client")
.clientSecret("{noop}secret")
.clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_POST)
.authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
.build()
return InMemoryRegisteredClientRepository(testClient)
}
@Bean
fun jwkSource(): JWKSource<SecurityContext> {
val keyPair = generateRsaKey()
val rsaKey = RSAKey.Builder(keyPair.public as RSAPublicKey)
.privateKey(keyPair.private as RSAPrivateKey)
.keyID(UUID.randomUUID().toString())
.build()
val jwkSet = JWKSet(rsaKey)
return ImmutableJWKSet(jwkSet)
}
private fun generateRsaKey(): KeyPair {
val keyPair: KeyPair
try {
val keyPairGenerator = KeyPairGenerator.getInstance("RSA")
keyPairGenerator.initialize(2048)
keyPair = keyPairGenerator.generateKeyPair()
} catch (ex: java.lang.Exception) {
throw IllegalStateException(ex)
}
return keyPair
}
@Bean
fun jwtDecoder(jwkSource: JWKSource<SecurityContext?>?): JwtDecoder {
return OAuth2AuthorizationServerConfiguration.jwtDecoder(jwkSource)
}
@Bean
fun authorizationServerSettings(): AuthorizationServerSettings {
return AuthorizationServerSettings.builder().build()
}
}
View File
@@ -0,0 +1,13 @@
package ru.vyatsu.qr_access_auth_server
import org.junit.jupiter.api.Test
import org.springframework.boot.test.context.SpringBootTest
@SpringBootTest
class QrAccessAuthServerApplicationTests {
@Test
fun contextLoads() {
}
}