Skip to content

Commit 5f606ae

Browse files
committed
Simplified federated login in demo sample
Closes gh-1208
1 parent a70783e commit 5f606ae

File tree

4 files changed

+8
-158
lines changed

4 files changed

+8
-158
lines changed

docs/src/docs/asciidoc/guides/how-to-social-login.adoc

-13
Original file line numberDiff line numberDiff line change
@@ -121,23 +121,10 @@ If you configured a `UserDetailsService` when xref:{docs-dir}/getting-started.ad
121121
The https://github.com/spring-projects/spring-authorization-server/tree/{github-ref}/samples#demo-sample[demo authorization server sample^] demonstrates advanced configuration options for federating identity providers.
122122
Select from the following use cases to see an example of each:
123123

124-
* I want to <<advanced-use-cases-automatically-redirect>>
125124
* I want to <<advanced-use-cases-capture-users>>
126125
* I want to <<advanced-use-cases-map-claims>>
127126
* I want to <<advanced-use-cases-configurer>>
128127

129-
[[advanced-use-cases-automatically-redirect]]
130-
=== Automatically Redirect to a Provider
131-
132-
The following example `AuthenticationEntryPoint` uses a query parameter as a hint from the client to indicate which provider to automatically redirect to for authentication.
133-
For example, assuming Google is configured as a social login provider with a `registrationId` of `google`, a request to `/oauth2/authorize?idp=google&...` will redirect an unauthenticated user to `/oauth2/authorization/google` which will initiate logging in with Google:
134-
135-
.`FederatedIdentityAuthenticationEntryPoint`
136-
[source,java]
137-
----
138-
include::{samples-dir}/demo-authorizationserver/src/main/java/sample/federation/FederatedIdentityAuthenticationEntryPoint.java[tags=imports;class]
139-
----
140-
141128
[[advanced-use-cases-capture-users]]
142129
=== Capture Users in a Database
143130

samples/demo-authorizationserver/src/main/java/sample/config/DefaultSecurityConfig.java

+4-10
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
*/
1616
package sample.config;
1717

18-
import sample.federation.FederatedIdentityConfigurer;
19-
import sample.federation.UserRepositoryOAuth2UserHandler;
20-
2118
import org.springframework.context.annotation.Bean;
2219
import org.springframework.context.annotation.Configuration;
2320
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
@@ -31,8 +28,6 @@
3128
import org.springframework.security.web.SecurityFilterChain;
3229
import org.springframework.security.web.session.HttpSessionEventPublisher;
3330

34-
import static org.springframework.security.config.Customizer.withDefaults;
35-
3631
/**
3732
* @author Joe Grandja
3833
* @author Steve Riesenberg
@@ -45,17 +40,16 @@ public class DefaultSecurityConfig {
4540
// @formatter:off
4641
@Bean
4742
public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
48-
FederatedIdentityConfigurer federatedIdentityConfigurer = new FederatedIdentityConfigurer()
49-
.oauth2UserHandler(new UserRepositoryOAuth2UserHandler());
50-
5143
http
5244
.authorizeHttpRequests(authorize ->
5345
authorize
5446
.requestMatchers("/assets/**", "/webjars/**", "/login").permitAll()
5547
.anyRequest().authenticated()
5648
)
57-
.formLogin(withDefaults())
58-
.apply(federatedIdentityConfigurer);
49+
.formLogin(formLogin ->
50+
formLogin.loginPage("/login")
51+
);
52+
5953
return http.build();
6054
}
6155
// @formatter:on

samples/demo-authorizationserver/src/main/java/sample/federation/FederatedIdentityAuthenticationEntryPoint.java

-86
This file was deleted.

samples/demo-authorizationserver/src/main/java/sample/federation/FederatedIdentityConfigurer.java

+4-49
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@
1616
package sample.federation;
1717

1818
// tag::imports[]
19+
1920
import java.util.function.Consumer;
2021

21-
import org.springframework.context.ApplicationContext;
2222
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
2323
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
24-
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
2524
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
2625
import org.springframework.security.oauth2.core.user.OAuth2User;
2726
import org.springframework.util.Assert;
@@ -36,36 +35,10 @@
3635
// tag::class[]
3736
public final class FederatedIdentityConfigurer extends AbstractHttpConfigurer<FederatedIdentityConfigurer, HttpSecurity> {
3837

39-
private String loginPageUrl = "/login";
40-
41-
private String authorizationRequestUri;
42-
4338
private Consumer<OAuth2User> oauth2UserHandler;
4439

4540
private Consumer<OidcUser> oidcUserHandler;
4641

47-
/**
48-
* @param loginPageUrl The URL of the login page, defaults to {@code "/login"}
49-
* @return This configurer for additional configuration
50-
*/
51-
public FederatedIdentityConfigurer loginPageUrl(String loginPageUrl) {
52-
Assert.hasText(loginPageUrl, "loginPageUrl cannot be empty");
53-
this.loginPageUrl = loginPageUrl;
54-
return this;
55-
}
56-
57-
/**
58-
* @param authorizationRequestUri The authorization request URI for initiating
59-
* the login flow with an external IDP, defaults to {@code
60-
* "/oauth2/authorization/{registrationId}"}
61-
* @return This configurer for additional configuration
62-
*/
63-
public FederatedIdentityConfigurer authorizationRequestUri(String authorizationRequestUri) {
64-
Assert.hasText(authorizationRequestUri, "authorizationRequestUri cannot be empty");
65-
this.authorizationRequestUri = authorizationRequestUri;
66-
return this;
67-
}
68-
6942
/**
7043
* @param oauth2UserHandler The {@link Consumer} for performing JIT account provisioning
7144
* with an OAuth 2.0 IDP
@@ -91,15 +64,6 @@ public FederatedIdentityConfigurer oidcUserHandler(Consumer<OidcUser> oidcUserHa
9164
// @formatter:off
9265
@Override
9366
public void init(HttpSecurity http) throws Exception {
94-
ApplicationContext applicationContext = http.getSharedObject(ApplicationContext.class);
95-
ClientRegistrationRepository clientRegistrationRepository =
96-
applicationContext.getBean(ClientRegistrationRepository.class);
97-
FederatedIdentityAuthenticationEntryPoint authenticationEntryPoint =
98-
new FederatedIdentityAuthenticationEntryPoint(this.loginPageUrl, clientRegistrationRepository);
99-
if (this.authorizationRequestUri != null) {
100-
authenticationEntryPoint.setAuthorizationRequestUri(this.authorizationRequestUri);
101-
}
102-
10367
FederatedIdentityAuthenticationSuccessHandler authenticationSuccessHandler =
10468
new FederatedIdentityAuthenticationSuccessHandler();
10569
if (this.oauth2UserHandler != null) {
@@ -110,18 +74,9 @@ public void init(HttpSecurity http) throws Exception {
11074
}
11175

11276
http
113-
.exceptionHandling(exceptionHandling ->
114-
exceptionHandling.authenticationEntryPoint(authenticationEntryPoint)
115-
)
116-
.oauth2Login(oauth2Login -> {
117-
oauth2Login.successHandler(authenticationSuccessHandler);
118-
if (this.authorizationRequestUri != null) {
119-
String baseUri = this.authorizationRequestUri.replace("/{registrationId}", "");
120-
oauth2Login.authorizationEndpoint(authorizationEndpoint ->
121-
authorizationEndpoint.baseUri(baseUri)
122-
);
123-
}
124-
});
77+
.oauth2Login(oauth2Login ->
78+
oauth2Login.successHandler(authenticationSuccessHandler)
79+
);
12580
}
12681
// @formatter:on
12782

0 commit comments

Comments
 (0)