Skip to content

Commit 74935a8

Browse files
committed
Update FormLogin + OTT Sample
Added time-sensitive endpoint Updated to use new static authority values Updated to use HttpSecurity customizers
1 parent 6810915 commit 74935a8

File tree

9 files changed

+164
-200
lines changed

9 files changed

+164
-200
lines changed

servlet/spring-boot/java/authentication/mfa/formLogin+ott/README.adoc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,14 @@ Use this one-time token: 1319c31d-c5e0-4123-9b1f-3ffc34aba673
3636
********************************************************
3737
----
3838

39+
=== Time-sensitive Endpoints
40+
41+
Navigating to `/profile` is authorized if you have entered your password within the last five minutes.
42+
Otherwise, you are directed back to the login page.
43+
3944
== Configuring
4045

41-
There are three profiles in this sample; `default`, `custom-pages`, and `elevated-security`.
46+
There are two profiles in this sample: `default` and `custom-pages`.
4247

4348
`default` is the arrangement described in <<usage>>.
4449

servlet/spring-boot/java/authentication/mfa/formLogin+ott/src/main/java/example/CustomPagesSecurityConfig.java

Lines changed: 0 additions & 44 deletions
This file was deleted.

servlet/spring-boot/java/authentication/mfa/formLogin+ott/src/main/java/example/DefaultSecurityConfig.java

Lines changed: 0 additions & 48 deletions
This file was deleted.

servlet/spring-boot/java/authentication/mfa/formLogin+ott/src/main/java/example/ElevatedSecurityPageSecurityConfig.java

Lines changed: 0 additions & 41 deletions
This file was deleted.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package example;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.context.annotation.Profile;
6+
import org.springframework.security.config.Customizer;
7+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
8+
import org.springframework.stereotype.Controller;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
11+
@Configuration(proxyBeanMethods = false)
12+
@Controller
13+
@Profile("custom-pages")
14+
class FormLoginConfig {
15+
static final String PATH = "/auth/password";
16+
17+
@GetMapping(PATH)
18+
String auth() {
19+
return "password";
20+
}
21+
22+
@Bean
23+
Customizer<HttpSecurity> formLogin() {
24+
// @formatter:off
25+
return (http) -> http
26+
.authorizeHttpRequests((authz) -> authz.requestMatchers(PATH).permitAll())
27+
.formLogin((form) -> form.loginPage(PATH));
28+
// @formatter:on
29+
}
30+
}

servlet/spring-boot/java/authentication/mfa/formLogin+ott/src/main/java/example/FormLoginOttMfaApplication.java

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,35 +19,29 @@
1919
import org.springframework.boot.SpringApplication;
2020
import org.springframework.boot.autoconfigure.SpringBootApplication;
2121
import org.springframework.context.annotation.Bean;
22+
import org.springframework.security.config.annotation.authorization.EnableGlobalMultiFactorAuthentication;
2223
import org.springframework.security.core.userdetails.User;
2324
import org.springframework.security.core.userdetails.UserDetails;
2425
import org.springframework.security.core.userdetails.UserDetailsService;
2526
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
2627
import org.springframework.stereotype.Controller;
2728
import org.springframework.web.bind.annotation.GetMapping;
2829

30+
import static org.springframework.security.core.authority.FactorGrantedAuthority.OTT_AUTHORITY;
31+
import static org.springframework.security.core.authority.FactorGrantedAuthority.PASSWORD_AUTHORITY;
32+
2933
@SpringBootApplication
3034
public class FormLoginOttMfaApplication {
3135

3236
public static void main(String[] args) {
3337
SpringApplication.run(FormLoginOttMfaApplication.class, args);
3438
}
3539

36-
@Controller
37-
static class AppController {
38-
@GetMapping("/profile")
39-
String profile() {
40-
return "profile";
41-
}
42-
}
43-
44-
@Bean
45-
UserDetailsService users() {
46-
UserDetails user = User.withDefaultPasswordEncoder()
47-
.username("user")
48-
.password("password")
49-
.authorities("app")
50-
.build();
51-
return new InMemoryUserDetailsManager(user);
52-
}
40+
@Controller
41+
static class AppController {
42+
@GetMapping("/profile")
43+
String profile() {
44+
return "profile";
45+
}
46+
}
5347
}

servlet/spring-boot/java/authentication/mfa/formLogin+ott/src/main/java/example/LoggingOneTimeTokenGenerationSuccessHandler.java

Lines changed: 0 additions & 49 deletions
This file was deleted.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package example;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.context.annotation.Profile;
6+
import org.springframework.security.config.Customizer;
7+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
8+
import org.springframework.stereotype.Controller;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
11+
@Configuration(proxyBeanMethods = false)
12+
@Controller
13+
@Profile("custom-pages")
14+
class OttLoginConfig {
15+
static final String PATH = "/auth/ott";
16+
17+
@GetMapping(PATH)
18+
String auth() {
19+
return "ott";
20+
}
21+
22+
@Bean
23+
Customizer<HttpSecurity> ottLogin() {
24+
// @formatter:off
25+
return (http) -> http
26+
.authorizeHttpRequests((authz) -> authz.requestMatchers(PATH).permitAll())
27+
.oneTimeTokenLogin((ott) -> ott.loginPage(PATH));
28+
// @formatter:on
29+
}
30+
31+
}

0 commit comments

Comments
 (0)