Skip to content

Commit 4ccd5ce

Browse files
committed
Use Spring Boot properties
Closes gh-30
1 parent 1ad87dc commit 4ccd5ce

File tree

2 files changed

+32
-39
lines changed

2 files changed

+32
-39
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2020 the original author or authors.
2+
* Copyright 2020-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -21,60 +21,50 @@
2121

2222
import javax.servlet.http.HttpServletRequest;
2323

24-
import org.springframework.beans.factory.annotation.Value;
2524
import org.springframework.context.annotation.Bean;
25+
import org.springframework.context.annotation.Configuration;
2626
import org.springframework.security.authentication.AuthenticationManager;
2727
import org.springframework.security.authentication.AuthenticationManagerResolver;
28+
import org.springframework.security.authentication.ProviderManager;
2829
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
29-
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
30-
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
3130
import org.springframework.security.oauth2.jwt.JwtDecoder;
32-
import org.springframework.security.oauth2.jwt.NimbusJwtDecoder;
3331
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationProvider;
3432
import org.springframework.security.oauth2.server.resource.authentication.JwtBearerTokenAuthenticationConverter;
3533
import org.springframework.security.oauth2.server.resource.authentication.OpaqueTokenAuthenticationProvider;
36-
import org.springframework.security.oauth2.server.resource.introspection.NimbusOpaqueTokenIntrospector;
3734
import org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector;
35+
import org.springframework.security.web.SecurityFilterChain;
3836

3937
/**
4038
* OAuth Resource Security configuration.
4139
*
4240
* @author Josh Cummings
4341
*/
44-
@EnableWebSecurity
45-
public class OAuth2ResourceServerSecurityConfiguration extends WebSecurityConfigurerAdapter {
42+
@Configuration
43+
public class OAuth2ResourceServerSecurityConfiguration {
4644

47-
@Value("${tenantOne.jwk-set-uri}")
48-
String jwkSetUri;
49-
50-
@Value("${tenantTwo.introspection-uri}")
51-
String introspectionUri;
52-
53-
@Value("${tenantTwo.introspection-client-id}")
54-
String introspectionClientId;
55-
56-
@Value("${tenantTwo.introspection-client-secret}")
57-
String introspectionClientSecret;
58-
59-
@Override
60-
protected void configure(HttpSecurity http) throws Exception {
45+
@Bean
46+
SecurityFilterChain apiSecurity(HttpSecurity http,
47+
AuthenticationManagerResolver<HttpServletRequest> authenticationManagerResolver) throws Exception {
6148
// @formatter:off
6249
http
6350
.authorizeRequests((requests) -> requests
64-
.mvcMatchers("/**/message/**").hasAuthority("SCOPE_message:read")
65-
.anyRequest().authenticated()
51+
.mvcMatchers("/**/message/**").hasAuthority("SCOPE_message:read")
52+
.anyRequest().authenticated()
6653
)
6754
.oauth2ResourceServer((resourceServer) -> resourceServer
68-
.authenticationManagerResolver(multitenantAuthenticationManager())
55+
.authenticationManagerResolver(authenticationManagerResolver)
6956
);
7057
// @formatter:on
58+
59+
return http.build();
7160
}
7261

7362
@Bean
74-
AuthenticationManagerResolver<HttpServletRequest> multitenantAuthenticationManager() {
63+
AuthenticationManagerResolver<HttpServletRequest> multitenantAuthenticationManager(JwtDecoder jwtDecoder,
64+
OpaqueTokenIntrospector opaqueTokenIntrospector) {
7565
Map<String, AuthenticationManager> authenticationManagers = new HashMap<>();
76-
authenticationManagers.put("tenantOne", jwt());
77-
authenticationManagers.put("tenantTwo", opaque());
66+
authenticationManagers.put("tenantOne", jwt(jwtDecoder));
67+
authenticationManagers.put("tenantTwo", opaque(opaqueTokenIntrospector));
7868
return (request) -> {
7969
String[] pathParts = request.getRequestURI().split("/");
8070
String tenantId = (pathParts.length > 0) ? pathParts[1] : null;
@@ -86,17 +76,14 @@ AuthenticationManagerResolver<HttpServletRequest> multitenantAuthenticationManag
8676
};
8777
}
8878

89-
AuthenticationManager jwt() {
90-
JwtDecoder jwtDecoder = NimbusJwtDecoder.withJwkSetUri(this.jwkSetUri).build();
79+
AuthenticationManager jwt(JwtDecoder jwtDecoder) {
9180
JwtAuthenticationProvider authenticationProvider = new JwtAuthenticationProvider(jwtDecoder);
9281
authenticationProvider.setJwtAuthenticationConverter(new JwtBearerTokenAuthenticationConverter());
93-
return authenticationProvider::authenticate;
82+
return new ProviderManager(authenticationProvider);
9483
}
9584

96-
AuthenticationManager opaque() {
97-
OpaqueTokenIntrospector introspectionClient = new NimbusOpaqueTokenIntrospector(this.introspectionUri,
98-
this.introspectionClientId, this.introspectionClientSecret);
99-
return new OpaqueTokenAuthenticationProvider(introspectionClient)::authenticate;
85+
AuthenticationManager opaque(OpaqueTokenIntrospector introspectionClient) {
86+
return new ProviderManager(new OpaqueTokenAuthenticationProvider(introspectionClient));
10087
}
10188

10289
}
Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
tenantOne.jwk-set-uri: ${mockwebserver.url}/.well-known/jwks.json
2-
tenantTwo.introspection-uri: ${mockwebserver.url}/introspect
3-
tenantTwo.introspection-client-id: client
4-
tenantTwo.introspection-client-secret: secret
1+
spring:
2+
security:
3+
oauth2:
4+
resourceserver:
5+
jwt:
6+
jwk-set-uri: ${mockwebserver.url}/.well-known/jwks.json
7+
opaquetoken:
8+
introspection-uri: ${mockwebserver.url}/introspect
9+
client-id: client
10+
client-secret: secret

0 commit comments

Comments
 (0)