|
|
|
|
@ -27,6 +27,10 @@ import org.springframework.context.annotation.Bean;
@@ -27,6 +27,10 @@ import org.springframework.context.annotation.Bean;
|
|
|
|
|
import org.springframework.context.annotation.Configuration; |
|
|
|
|
import org.springframework.core.Ordered; |
|
|
|
|
import org.springframework.core.annotation.Order; |
|
|
|
|
import org.springframework.jdbc.core.JdbcTemplate; |
|
|
|
|
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; |
|
|
|
|
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; |
|
|
|
|
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; |
|
|
|
|
import org.springframework.security.config.Customizer; |
|
|
|
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity; |
|
|
|
|
import org.springframework.security.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration; |
|
|
|
|
@ -34,7 +38,11 @@ import org.springframework.security.oauth2.core.AuthorizationGrantType;
@@ -34,7 +38,11 @@ import org.springframework.security.oauth2.core.AuthorizationGrantType;
|
|
|
|
|
import org.springframework.security.oauth2.core.ClientAuthenticationMethod; |
|
|
|
|
import org.springframework.security.oauth2.core.oidc.OidcScopes; |
|
|
|
|
import org.springframework.security.oauth2.jwt.JwtDecoder; |
|
|
|
|
import org.springframework.security.oauth2.server.authorization.client.InMemoryRegisteredClientRepository; |
|
|
|
|
import org.springframework.security.oauth2.server.authorization.JdbcOAuth2AuthorizationConsentService; |
|
|
|
|
import org.springframework.security.oauth2.server.authorization.JdbcOAuth2AuthorizationService; |
|
|
|
|
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationConsentService; |
|
|
|
|
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; |
|
|
|
|
import org.springframework.security.oauth2.server.authorization.client.JdbcRegisteredClientRepository; |
|
|
|
|
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.ProviderSettings; |
|
|
|
|
@ -56,7 +64,7 @@ public class AuthorizationServerConfig {
@@ -56,7 +64,7 @@ public class AuthorizationServerConfig {
|
|
|
|
|
|
|
|
|
|
// @formatter:off
|
|
|
|
|
@Bean |
|
|
|
|
public RegisteredClientRepository registeredClientRepository() { |
|
|
|
|
public RegisteredClientRepository registeredClientRepository(JdbcTemplate jdbcTemplate) { |
|
|
|
|
RegisteredClient registeredClient = RegisteredClient.withId(UUID.randomUUID().toString()) |
|
|
|
|
.clientId("messaging-client") |
|
|
|
|
.clientSecret("{noop}secret") |
|
|
|
|
@ -71,10 +79,27 @@ public class AuthorizationServerConfig {
@@ -71,10 +79,27 @@ public class AuthorizationServerConfig {
|
|
|
|
|
.scope("message.write") |
|
|
|
|
.clientSettings(clientSettings -> clientSettings.requireUserConsent(true)) |
|
|
|
|
.build(); |
|
|
|
|
return new InMemoryRegisteredClientRepository(registeredClient); |
|
|
|
|
|
|
|
|
|
// Save registered client in db as if in-memory
|
|
|
|
|
JdbcRegisteredClientRepository registeredClientRepository = new JdbcRegisteredClientRepository(jdbcTemplate); |
|
|
|
|
if (registeredClientRepository.findByClientId(registeredClient.getClientId()) == null) { |
|
|
|
|
registeredClientRepository.save(registeredClient); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return registeredClientRepository; |
|
|
|
|
} |
|
|
|
|
// @formatter:on
|
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
public OAuth2AuthorizationService authorizationService(JdbcTemplate jdbcTemplate, RegisteredClientRepository registeredClientRepository) { |
|
|
|
|
return new JdbcOAuth2AuthorizationService(jdbcTemplate, registeredClientRepository); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
public OAuth2AuthorizationConsentService authorizationConsentService(JdbcTemplate jdbcTemplate, RegisteredClientRepository registeredClientRepository) { |
|
|
|
|
return new JdbcOAuth2AuthorizationConsentService(jdbcTemplate, registeredClientRepository); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
public JWKSource<SecurityContext> jwkSource() { |
|
|
|
|
RSAKey rsaKey = Jwks.generateRsa(); |
|
|
|
|
@ -92,4 +117,18 @@ public class AuthorizationServerConfig {
@@ -92,4 +117,18 @@ public class AuthorizationServerConfig {
|
|
|
|
|
return new ProviderSettings().issuer("http://auth-server:9000"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
public EmbeddedDatabase embeddedDatabase() { |
|
|
|
|
// @formatter:off
|
|
|
|
|
return new EmbeddedDatabaseBuilder() |
|
|
|
|
.generateUniqueName(true) |
|
|
|
|
.setType(EmbeddedDatabaseType.H2) |
|
|
|
|
.setScriptEncoding("UTF-8") |
|
|
|
|
.addScript("org/springframework/security/oauth2/server/authorization/oauth2-authorization-schema.sql") |
|
|
|
|
.addScript("org/springframework/security/oauth2/server/authorization/oauth2-authorization-consent-schema.sql") |
|
|
|
|
.addScript("org/springframework/security/oauth2/server/authorization/client/oauth2-registered-client-schema.sql") |
|
|
|
|
.build(); |
|
|
|
|
// @formatter:on
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|