Skip to content

Commit f993bc0

Browse files
BogdanStoeanpivovarit
authored andcommitted
[BAEL-1410] Spring Boot OAuth2 Support (eugenp#3409)
* initial setup with spring boot/ spring data jpa/ flyway * BAEL-1315 - added flyway test extensions for spring * BAEL-1315 - added flyway test extensions for spring * BAEL-1315 - created multiple migration scripts and locations * BAEL-1315 - test insert after schema creation * cleanup * BAEL-1315 - test data changes by a migration * [BAEL-1410] Spring Boot Security Auto-Configuration * [BAEL-1410] Added some tests for incorrect credentials use case * [BAEL-1410] Added readme and some code improvements * [BAEL-1410] removed form based auth config because is redundant added oauth2 server auto-configuration sample with test * [BAEL-1410] added custom Authorization Server Config * [BAEL-1410] update README * [BAEL-1410]refactor tests * [BAEL-1410]oauth2 resource server * [BAEL-1410]oauth2 sso sample with facebook * [BAEL-1410]remove spring-flyway
1 parent 2939683 commit f993bc0

17 files changed

Lines changed: 270 additions & 162 deletions

spring-boot-security/README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
### Spring Boot Security Auto-Configuration
22

33
- mvn clean install
4-
- uncomment in application.properties spring.profiles.active=basic # for basic auth config
5-
- uncomment in application.properties spring.profiles.active=form # for form based auth config
6-
- uncomment actuator dependency simultaneously with the line from main class
4+
- uncomment actuator dependency simultaneously with the line from basic auth main class
5+
- uncomment security properties for easy testing. If not random will be generated.
6+
7+
### CURL commands
8+
- curl -X POST -u baeldung-admin:baeldung -d grant_type=client_credentials -d username=baeldung-admin -d password=baeldung http://localhost:8080/oauth/token

spring-boot-security/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@
4343
<groupId>org.springframework.boot</groupId>
4444
<artifactId>spring-boot-starter-security</artifactId>
4545
</dependency>
46+
<dependency>
47+
<groupId>org.springframework.security.oauth</groupId>
48+
<artifactId>spring-security-oauth2</artifactId>
49+
</dependency>
4650
<dependency>
4751
<groupId>org.springframework.boot</groupId>
4852
<artifactId>spring-boot-starter-web</artifactId>

spring-boot-security/src/main/java/com/baeldung/springbootsecurity/SpringBootSecurityApplication.java renamed to spring-boot-security/src/main/java/com/baeldung/springbootsecurity/basic_auth/SpringBootSecurityApplication.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.baeldung.springbootsecurity;
1+
package com.baeldung.springbootsecurity.basic_auth;
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -7,7 +7,7 @@
77
@SpringBootApplication(exclude = {
88
SecurityAutoConfiguration.class
99
// ,ManagementWebSecurityAutoConfiguration.class
10-
})
10+
}, scanBasePackages = "com.baeldung.springbootsecurity.basic_auth")
1111
public class SpringBootSecurityApplication {
1212

1313
public static void main(String[] args) {

spring-boot-security/src/main/java/com/baeldung/springbootsecurity/config/BasicConfiguration.java renamed to spring-boot-security/src/main/java/com/baeldung/springbootsecurity/basic_auth/config/BasicAuthConfiguration.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
package com.baeldung.springbootsecurity.config;
1+
package com.baeldung.springbootsecurity.basic_auth.config;
22

33
import org.springframework.context.annotation.Configuration;
4-
import org.springframework.context.annotation.Profile;
54
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
65
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
76
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
87
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
98

109
@Configuration
1110
@EnableWebSecurity
12-
@Profile("basic")
13-
public class BasicConfiguration extends WebSecurityConfigurerAdapter {
11+
public class BasicAuthConfiguration extends WebSecurityConfigurerAdapter {
1412

1513
@Override
1614
protected void configure(AuthenticationManagerBuilder auth) throws Exception {

spring-boot-security/src/main/java/com/baeldung/springbootsecurity/config/FormLoginConfiguration.java

Lines changed: 0 additions & 39 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.baeldung.springbootsecurity.oauth2resource;
2+
3+
import org.springframework.boot.autoconfigure.SpringBootApplication;
4+
import org.springframework.boot.builder.SpringApplicationBuilder;
5+
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
6+
import org.springframework.web.bind.annotation.GetMapping;
7+
import org.springframework.web.bind.annotation.RestController;
8+
9+
@EnableResourceServer
10+
@SpringBootApplication(scanBasePackages = "com.baeldung.springbootsecurity.oauth2resource")
11+
public class SpringBootOAuth2ResourceApplication {
12+
13+
public static void main(String[] args) {
14+
new SpringApplicationBuilder()
15+
.profiles("resource")
16+
.sources(SpringBootOAuth2ResourceApplication.class)
17+
.build()
18+
.run(args);
19+
}
20+
21+
@RestController
22+
class SecuredResourceController {
23+
24+
@GetMapping("/securedResource")
25+
public String securedResource() {
26+
return "Baeldung Secured Resource OK";
27+
}
28+
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.baeldung.springbootsecurity.oauth2server;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
6+
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
7+
import org.springframework.web.bind.annotation.GetMapping;
8+
import org.springframework.web.bind.annotation.RestController;
9+
10+
import java.security.Principal;
11+
12+
@EnableResourceServer
13+
@EnableAuthorizationServer
14+
@SpringBootApplication(scanBasePackages = "com.baeldung.springbootsecurity.oauth2server")
15+
public class SpringBootAuthorizationServerApplication {
16+
17+
public static void main(String[] args) {
18+
SpringApplication.run(SpringBootAuthorizationServerApplication.class, args);
19+
}
20+
21+
@RestController
22+
class UserController {
23+
24+
@GetMapping("/user")
25+
public Principal user(Principal user) {
26+
return user;
27+
}
28+
29+
}
30+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.baeldung.springbootsecurity.oauth2server.config;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.context.annotation.Profile;
6+
import org.springframework.security.authentication.AuthenticationManager;
7+
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
8+
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
9+
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
10+
11+
@Configuration
12+
@Profile("authz")
13+
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
14+
15+
@Autowired
16+
private AuthenticationManager authenticationManager;
17+
18+
@Override
19+
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
20+
endpoints.authenticationManager(authenticationManager);
21+
}
22+
23+
@Override
24+
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
25+
clients
26+
.inMemory()
27+
.withClient("baeldung")
28+
.secret("baeldung")
29+
.authorizedGrantTypes("client_credentials", "password", "authorization_code")
30+
.scopes("openid", "read")
31+
.autoApprove(true)
32+
.and()
33+
.withClient("baeldung-admin")
34+
.secret("baeldung")
35+
.authorizedGrantTypes("authorization_code", "client_credentials", "refresh_token")
36+
.scopes("read", "write")
37+
.autoApprove(true);
38+
}
39+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.baeldung.springbootsecurity.oauth2sso;
2+
3+
import org.springframework.boot.autoconfigure.SpringBootApplication;
4+
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
5+
import org.springframework.boot.builder.SpringApplicationBuilder;
6+
7+
@EnableOAuth2Sso
8+
@SpringBootApplication(scanBasePackages = "com.baeldung.springbootsecurity.oauth2sso")
9+
public class SpringBootOAuth2SsoApplication {
10+
11+
public static void main(String[] args) {
12+
new SpringApplicationBuilder()
13+
.profiles("sso")
14+
.sources(SpringBootOAuth2SsoApplication.class)
15+
.build()
16+
.run(args);
17+
}
18+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
security.user.password=password
2+
security.oauth2.client.client-id=client
3+
security.oauth2.client.client-secret=secret

0 commit comments

Comments
 (0)