Skip to content

Commit f06536f

Browse files
committed
Polish Authorization Server auto-configuration
1 parent 94b091d commit f06536f

File tree

14 files changed

+94
-200
lines changed

14 files changed

+94
-200
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/server/OAuth2AuthorizationServerPropertiesSettingsAdapter.java

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

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/server/package-info.java

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

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/server/servlet/OAuth2AuthorizationServerConfiguration.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,12 @@
1616

1717
package org.springframework.boot.autoconfigure.security.oauth2.server.servlet;
1818

19-
import java.util.List;
20-
2119
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
22-
import org.springframework.boot.autoconfigure.security.oauth2.server.OAuth2AuthorizationServerProperties;
23-
import org.springframework.boot.autoconfigure.security.oauth2.server.OAuth2AuthorizationServerPropertiesRegistrationAdapter;
24-
import org.springframework.boot.autoconfigure.security.oauth2.server.OAuth2AuthorizationServerPropertiesSettingsAdapter;
25-
import org.springframework.boot.autoconfigure.security.oauth2.server.RegisteredClientsConfiguredCondition;
2620
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2721
import org.springframework.context.annotation.Bean;
2822
import org.springframework.context.annotation.Conditional;
2923
import org.springframework.context.annotation.Configuration;
3024
import org.springframework.security.oauth2.server.authorization.client.InMemoryRegisteredClientRepository;
31-
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
3225
import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;
3326
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
3427

@@ -42,19 +35,23 @@
4235
@EnableConfigurationProperties(OAuth2AuthorizationServerProperties.class)
4336
class OAuth2AuthorizationServerConfiguration {
4437

38+
private final OAuth2AuthorizationServerPropertiesMapper propertiesMapper;
39+
40+
OAuth2AuthorizationServerConfiguration(OAuth2AuthorizationServerProperties properties) {
41+
this.propertiesMapper = new OAuth2AuthorizationServerPropertiesMapper(properties);
42+
}
43+
4544
@Bean
4645
@ConditionalOnMissingBean
4746
@Conditional(RegisteredClientsConfiguredCondition.class)
48-
RegisteredClientRepository registeredClientRepository(OAuth2AuthorizationServerProperties properties) {
49-
List<RegisteredClient> registeredClients = OAuth2AuthorizationServerPropertiesRegistrationAdapter
50-
.getRegisteredClients(properties);
51-
return new InMemoryRegisteredClientRepository(registeredClients);
47+
RegisteredClientRepository registeredClientRepository() {
48+
return new InMemoryRegisteredClientRepository(this.propertiesMapper.asRegisteredClients());
5249
}
5350

5451
@Bean
5552
@ConditionalOnMissingBean
56-
AuthorizationServerSettings authorizationServerSettings(OAuth2AuthorizationServerProperties properties) {
57-
return OAuth2AuthorizationServerPropertiesSettingsAdapter.getAuthorizationServerSettings(properties);
53+
AuthorizationServerSettings authorizationServerSettings() {
54+
return this.propertiesMapper.asAuthorizationServerSettings();
5855
}
5956

6057
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/server/servlet/OAuth2AuthorizationServerJwtAutoConfiguration.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,9 @@ private static RSAKey getRsaKey() {
7373
KeyPair keyPair = generateRsaKey();
7474
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
7575
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
76-
// @formatter:off
77-
RSAKey rsaKey = new RSAKey.Builder(publicKey)
78-
.privateKey(privateKey)
79-
.keyID(UUID.randomUUID().toString())
80-
.build();
81-
// @formatter:on
76+
RSAKey rsaKey = new RSAKey.Builder(publicKey).privateKey(privateKey)
77+
.keyID(UUID.randomUUID().toString())
78+
.build();
8279
return rsaKey;
8380
}
8481

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.springframework.boot.autoconfigure.security.oauth2.server;
17+
package org.springframework.boot.autoconfigure.security.oauth2.server.servlet;
1818

1919
import java.time.Duration;
2020
import java.util.HashMap;
Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,43 +14,63 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.springframework.boot.autoconfigure.security.oauth2.server;
17+
package org.springframework.boot.autoconfigure.security.oauth2.server.servlet;
1818

1919
import java.util.ArrayList;
2020
import java.util.List;
2121

22-
import org.springframework.boot.autoconfigure.security.oauth2.server.OAuth2AuthorizationServerProperties.Client;
23-
import org.springframework.boot.autoconfigure.security.oauth2.server.OAuth2AuthorizationServerProperties.Registration;
22+
import org.springframework.boot.autoconfigure.security.oauth2.server.servlet.OAuth2AuthorizationServerProperties.Client;
23+
import org.springframework.boot.autoconfigure.security.oauth2.server.servlet.OAuth2AuthorizationServerProperties.Registration;
2424
import org.springframework.boot.context.properties.PropertyMapper;
2525
import org.springframework.security.oauth2.core.AuthorizationGrantType;
2626
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
2727
import org.springframework.security.oauth2.jose.jws.JwsAlgorithm;
2828
import org.springframework.security.oauth2.jose.jws.MacAlgorithm;
2929
import org.springframework.security.oauth2.jose.jws.SignatureAlgorithm;
3030
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
31+
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
3132
import org.springframework.security.oauth2.server.authorization.settings.ClientSettings;
3233
import org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat;
3334
import org.springframework.security.oauth2.server.authorization.settings.TokenSettings;
3435

3536
/**
36-
* Adapter class to convert {@link Client} to a {@link RegisteredClient}.
37+
* Maps {@OAuth2AuthorizationServerProperties} to Authorization Server types.
3738
*
3839
* @author Steve Riesenberg
39-
* @since 3.1.0
4040
*/
41-
public final class OAuth2AuthorizationServerPropertiesRegistrationAdapter {
41+
final class OAuth2AuthorizationServerPropertiesMapper {
4242

43-
private OAuth2AuthorizationServerPropertiesRegistrationAdapter() {
43+
private final OAuth2AuthorizationServerProperties properties;
44+
45+
OAuth2AuthorizationServerPropertiesMapper(OAuth2AuthorizationServerProperties properties) {
46+
this.properties = properties;
47+
}
48+
49+
AuthorizationServerSettings asAuthorizationServerSettings() {
50+
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
51+
OAuth2AuthorizationServerProperties.Endpoint endpoint = this.properties.getEndpoint();
52+
OAuth2AuthorizationServerProperties.OidcEndpoint oidc = endpoint.getOidc();
53+
AuthorizationServerSettings.Builder builder = AuthorizationServerSettings.builder();
54+
map.from(this.properties::getIssuer).to(builder::issuer);
55+
map.from(endpoint::getAuthorizationUri).to(builder::authorizationEndpoint);
56+
map.from(endpoint::getTokenUri).to(builder::tokenEndpoint);
57+
map.from(endpoint::getJwkSetUri).to(builder::jwkSetEndpoint);
58+
map.from(endpoint::getTokenRevocationUri).to(builder::tokenRevocationEndpoint);
59+
map.from(endpoint::getTokenIntrospectionUri).to(builder::tokenIntrospectionEndpoint);
60+
map.from(oidc::getLogoutUri).to(builder::oidcLogoutEndpoint);
61+
map.from(oidc::getClientRegistrationUri).to(builder::oidcClientRegistrationEndpoint);
62+
map.from(oidc::getUserInfoUri).to(builder::oidcUserInfoEndpoint);
63+
return builder.build();
4464
}
4565

46-
public static List<RegisteredClient> getRegisteredClients(OAuth2AuthorizationServerProperties properties) {
66+
List<RegisteredClient> asRegisteredClients() {
4767
List<RegisteredClient> registeredClients = new ArrayList<>();
48-
properties.getClient()
68+
this.properties.getClient()
4969
.forEach((registrationId, client) -> registeredClients.add(getRegisteredClient(registrationId, client)));
5070
return registeredClients;
5171
}
5272

53-
private static RegisteredClient getRegisteredClient(String registrationId, Client client) {
73+
private RegisteredClient getRegisteredClient(String registrationId, Client client) {
5474
Registration registration = client.getRegistration();
5575
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
5676
RegisteredClient.Builder builder = RegisteredClient.withId(registrationId);
@@ -74,18 +94,18 @@ private static RegisteredClient getRegisteredClient(String registrationId, Clien
7494
return builder.build();
7595
}
7696

77-
private static ClientSettings getClientSettings(Client client, PropertyMapper map) {
97+
private ClientSettings getClientSettings(Client client, PropertyMapper map) {
7898
ClientSettings.Builder builder = ClientSettings.builder();
7999
map.from(client::isRequireProofKey).to(builder::requireProofKey);
80100
map.from(client::isRequireAuthorizationConsent).to(builder::requireAuthorizationConsent);
81101
map.from(client::getJwkSetUri).to(builder::jwkSetUrl);
82102
map.from(client::getTokenEndpointAuthenticationSigningAlgorithm)
83-
.as(OAuth2AuthorizationServerPropertiesRegistrationAdapter::jwsAlgorithm)
103+
.as(this::jwsAlgorithm)
84104
.to(builder::tokenEndpointAuthenticationSigningAlgorithm);
85105
return builder.build();
86106
}
87107

88-
private static TokenSettings getTokenSettings(Client client, PropertyMapper map) {
108+
private TokenSettings getTokenSettings(Client client, PropertyMapper map) {
89109
OAuth2AuthorizationServerProperties.Token token = client.getToken();
90110
TokenSettings.Builder builder = TokenSettings.builder();
91111
map.from(token::getAuthorizationCodeTimeToLive).to(builder::authorizationCodeTimeToLive);
@@ -94,12 +114,12 @@ private static TokenSettings getTokenSettings(Client client, PropertyMapper map)
94114
map.from(token::isReuseRefreshTokens).to(builder::reuseRefreshTokens);
95115
map.from(token::getRefreshTokenTimeToLive).to(builder::refreshTokenTimeToLive);
96116
map.from(token::getIdTokenSignatureAlgorithm)
97-
.as(OAuth2AuthorizationServerPropertiesRegistrationAdapter::signatureAlgorithm)
117+
.as(this::signatureAlgorithm)
98118
.to(builder::idTokenSignatureAlgorithm);
99119
return builder.build();
100120
}
101121

102-
private static JwsAlgorithm jwsAlgorithm(String signingAlgorithm) {
122+
private JwsAlgorithm jwsAlgorithm(String signingAlgorithm) {
103123
String name = signingAlgorithm.toUpperCase();
104124
JwsAlgorithm jwsAlgorithm = SignatureAlgorithm.from(name);
105125
if (jwsAlgorithm == null) {
@@ -108,7 +128,7 @@ private static JwsAlgorithm jwsAlgorithm(String signingAlgorithm) {
108128
return jwsAlgorithm;
109129
}
110130

111-
private static SignatureAlgorithm signatureAlgorithm(String signatureAlgorithm) {
131+
private SignatureAlgorithm signatureAlgorithm(String signatureAlgorithm) {
112132
return SignatureAlgorithm.from(signatureAlgorithm.toUpperCase());
113133
}
114134

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/server/servlet/OAuth2AuthorizationServerWebSecurityConfiguration.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,26 +48,17 @@ class OAuth2AuthorizationServerWebSecurityConfiguration {
4848
SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
4949
OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
5050
http.getConfigurer(OAuth2AuthorizationServerConfigurer.class).oidc(Customizer.withDefaults());
51-
// @formatter:off
52-
http
53-
.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt)
51+
http.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt)
5452
.exceptionHandling((exceptions) -> exceptions
55-
.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login"))
56-
);
57-
// @formatter:on
53+
.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")));
5854
return http.build();
5955
}
6056

6157
@Bean
6258
@Order(SecurityProperties.BASIC_AUTH_ORDER)
6359
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
64-
// @formatter:off
65-
http
66-
.authorizeHttpRequests((authorize) -> authorize
67-
.anyRequest().authenticated()
68-
)
60+
http.authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated())
6961
.formLogin(Customizer.withDefaults());
70-
// @formatter:on
7162
return http.build();
7263
}
7364

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.springframework.boot.autoconfigure.security.oauth2.server;
17+
package org.springframework.boot.autoconfigure.security.oauth2.server.servlet;
1818

1919
import java.util.Collections;
2020
import java.util.Map;
@@ -34,9 +34,8 @@
3434
* properties are defined.
3535
*
3636
* @author Steve Riesenberg
37-
* @since 3.1.0
3837
*/
39-
public class RegisteredClientsConfiguredCondition extends SpringBootCondition {
38+
class RegisteredClientsConfiguredCondition extends SpringBootCondition {
4039

4140
private static final Bindable<Map<String, OAuth2AuthorizationServerProperties.Client>> STRING_CLIENT_MAP = Bindable
4241
.mapOf(String.class, OAuth2AuthorizationServerProperties.Client.class);

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/server/OAuth2AuthorizationServerPropertiesSettingsAdapterTests.java

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

0 commit comments

Comments
 (0)