Init auth server with stubs
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
@@ -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() {
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user