Skip to content

Commit 4daade7

Browse files
Steve Riesenbergsjohnr
authored andcommitted
Update authorization server sample to use jdbc
Closes gh-329
1 parent a949998 commit 4daade7

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
lines changed

samples/boot/oauth2-integration/authorizationserver/spring-security-samples-boot-oauth2-integrated-authorizationserver.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ apply plugin: 'io.spring.convention.spring-sample-boot'
33
dependencies {
44
compile 'org.springframework.boot:spring-boot-starter-web'
55
compile 'org.springframework.boot:spring-boot-starter-security'
6+
compile 'org.springframework.boot:spring-boot-starter-jdbc'
67
compile project(':spring-security-oauth2-authorization-server')
8+
runtimeOnly 'com.h2database:h2'
79

810
testCompile 'org.springframework.boot:spring-boot-starter-test'
911
testCompile 'net.sourceforge.htmlunit:htmlunit'

samples/boot/oauth2-integration/authorizationserver/src/main/java/sample/config/AuthorizationServerConfig.java

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,22 @@
2727
import org.springframework.context.annotation.Configuration;
2828
import org.springframework.core.Ordered;
2929
import org.springframework.core.annotation.Order;
30+
import org.springframework.jdbc.core.JdbcTemplate;
31+
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
32+
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
33+
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
3034
import org.springframework.security.config.Customizer;
3135
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
3236
import org.springframework.security.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration;
3337
import org.springframework.security.oauth2.core.AuthorizationGrantType;
3438
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
3539
import org.springframework.security.oauth2.core.oidc.OidcScopes;
3640
import org.springframework.security.oauth2.jwt.JwtDecoder;
37-
import org.springframework.security.oauth2.server.authorization.client.InMemoryRegisteredClientRepository;
41+
import org.springframework.security.oauth2.server.authorization.JdbcOAuth2AuthorizationConsentService;
42+
import org.springframework.security.oauth2.server.authorization.JdbcOAuth2AuthorizationService;
43+
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationConsentService;
44+
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
45+
import org.springframework.security.oauth2.server.authorization.client.JdbcRegisteredClientRepository;
3846
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
3947
import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;
4048
import org.springframework.security.oauth2.server.authorization.config.ProviderSettings;
@@ -56,7 +64,7 @@ public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity h
5664

5765
// @formatter:off
5866
@Bean
59-
public RegisteredClientRepository registeredClientRepository() {
67+
public RegisteredClientRepository registeredClientRepository(JdbcTemplate jdbcTemplate) {
6068
RegisteredClient registeredClient = RegisteredClient.withId(UUID.randomUUID().toString())
6169
.clientId("messaging-client")
6270
.clientSecret("{noop}secret")
@@ -71,10 +79,27 @@ public RegisteredClientRepository registeredClientRepository() {
7179
.scope("message.write")
7280
.clientSettings(clientSettings -> clientSettings.requireUserConsent(true))
7381
.build();
74-
return new InMemoryRegisteredClientRepository(registeredClient);
82+
83+
// Save registered client in db as if in-memory
84+
JdbcRegisteredClientRepository registeredClientRepository = new JdbcRegisteredClientRepository(jdbcTemplate);
85+
if (registeredClientRepository.findByClientId(registeredClient.getClientId()) == null) {
86+
registeredClientRepository.save(registeredClient);
87+
}
88+
89+
return registeredClientRepository;
7590
}
7691
// @formatter:on
7792

93+
@Bean
94+
public OAuth2AuthorizationService authorizationService(JdbcTemplate jdbcTemplate, RegisteredClientRepository registeredClientRepository) {
95+
return new JdbcOAuth2AuthorizationService(jdbcTemplate, registeredClientRepository);
96+
}
97+
98+
@Bean
99+
public OAuth2AuthorizationConsentService authorizationConsentService(JdbcTemplate jdbcTemplate, RegisteredClientRepository registeredClientRepository) {
100+
return new JdbcOAuth2AuthorizationConsentService(jdbcTemplate, registeredClientRepository);
101+
}
102+
78103
@Bean
79104
public JWKSource<SecurityContext> jwkSource() {
80105
RSAKey rsaKey = Jwks.generateRsa();
@@ -92,4 +117,18 @@ public ProviderSettings providerSettings() {
92117
return new ProviderSettings().issuer("http://auth-server:9000");
93118
}
94119

120+
@Bean
121+
public EmbeddedDatabase embeddedDatabase() {
122+
// @formatter:off
123+
return new EmbeddedDatabaseBuilder()
124+
.generateUniqueName(true)
125+
.setType(EmbeddedDatabaseType.H2)
126+
.setScriptEncoding("UTF-8")
127+
.addScript("org/springframework/security/oauth2/server/authorization/oauth2-authorization-schema.sql")
128+
.addScript("org/springframework/security/oauth2/server/authorization/oauth2-authorization-consent-schema.sql")
129+
.addScript("org/springframework/security/oauth2/server/authorization/client/oauth2-registered-client-schema.sql")
130+
.build();
131+
// @formatter:on
132+
}
133+
95134
}

0 commit comments

Comments
 (0)