Skip to content

Commit 79a7cf1

Browse files
authored
Merge pull request #12 from mzlnk/feature/GH-11
GH-11: added support for cookie token resolver
2 parents 846ba63 + 586c4e0 commit 79a7cf1

File tree

7 files changed

+88
-5
lines changed

7 files changed

+88
-5
lines changed

autoconfigure/src/main/java/io/mzlnk/springframework/multitenant/oauth2/resourceserver/AutoConfiguration.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.mzlnk.springframework.multitenant.oauth2.resourceserver.properties.AuthenticationProviderProperties;
44
import io.mzlnk.springframework.multitenant.oauth2.resourceserver.resolver.MultitenantAuthenticationManagerResolver;
5+
import io.mzlnk.springframework.multitenant.oauth2.resourceserver.resolver.token.TokenResolver;
56
import io.mzlnk.springframework.multitenant.oauth2.resourceserver.tenant.AuthenticationTenant;
67
import io.mzlnk.springframework.multitenant.oauth2.resourceserver.tenant.matcher.AuthenticationTenantMatcher;
78
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -37,8 +38,9 @@ public AuthenticationProviderProperties authenticationProviderProperties() {
3738
@Bean
3839
public MultitenantAuthenticationManagerResolver multitenantAuthenticationManagerResolver(AuthenticationProviderProperties properties,
3940
List<AuthenticationTenantMatcher> matchers,
40-
AuthenticationTenantFactory tenantFactory) {
41-
return new MultitenantAuthenticationManagerResolver(properties, matchers, tenantFactory);
41+
AuthenticationTenantFactory tenantFactory,
42+
TokenResolver tokenResolver) {
43+
return new MultitenantAuthenticationManagerResolver(properties, matchers, tenantFactory, tokenResolver);
4244
}
4345

4446
@Bean

autoconfigure/src/main/java/io/mzlnk/springframework/multitenant/oauth2/resourceserver/resolver/MultitenantAuthenticationManagerResolver.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.mzlnk.springframework.multitenant.oauth2.resourceserver.properties.AuthenticationProviderProperties;
55
import io.mzlnk.springframework.multitenant.oauth2.resourceserver.properties.TokenType;
66
import io.mzlnk.springframework.multitenant.oauth2.resourceserver.resolver.jwt.JwtAuthenticationManagerResolver;
7+
import io.mzlnk.springframework.multitenant.oauth2.resourceserver.resolver.token.TokenResolver;
78
import io.mzlnk.springframework.multitenant.oauth2.resourceserver.tenant.AuthenticationTenant;
89
import io.mzlnk.springframework.multitenant.oauth2.resourceserver.tenant.AuthenticationTenantFactory;
910
import io.mzlnk.springframework.multitenant.oauth2.resourceserver.tenant.JwtAuthenticationTenant;
@@ -33,16 +34,18 @@ public class MultitenantAuthenticationManagerResolver implements AuthenticationM
3334
private final Map<String, AuthenticationProvider> opaqueProviders;
3435
private final JwtAuthenticationManagerResolver jwtResolver;
3536

36-
private final BearerTokenResolver tokenResolver = new DefaultBearerTokenResolver();
37+
private final TokenResolver tokenResolver;
3738

3839
public MultitenantAuthenticationManagerResolver(AuthenticationProviderProperties tenantsProperties,
3940
List<AuthenticationTenantMatcher> externalMatchers,
40-
AuthenticationTenantFactory tenantFactory) {
41+
AuthenticationTenantFactory tenantFactory,
42+
TokenResolver tokenResolver) {
4143

4244
this.tenants = tenantFactory.create(tenantsProperties.getTenants(), externalMatchers);
4345
this.tenantsByIssuer = this.tenants.stream().collect(Collectors.toMap(AuthenticationTenant::getIssuer, a -> a));
4446
this.opaqueProviders = opaqueTokenAuthenticationProviders();
4547
this.jwtResolver = jwtResolver();
48+
this.tokenResolver = tokenResolver;
4649
}
4750

4851
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.mzlnk.springframework.multitenant.oauth2.resourceserver.resolver.token;
2+
3+
import javax.servlet.http.Cookie;
4+
import javax.servlet.http.HttpServletRequest;
5+
import java.util.Arrays;
6+
7+
public class CookieTokenResolver implements TokenResolver {
8+
9+
private final String cookieName;
10+
11+
public CookieTokenResolver(String cookieName) {
12+
this.cookieName = cookieName;
13+
}
14+
15+
@Override
16+
public String resolve(HttpServletRequest httpRequest) {
17+
return Arrays.stream(httpRequest.getCookies())
18+
.filter(cookie -> cookie.getName().equals(this.cookieName))
19+
.findAny()
20+
.map(Cookie::getValue)
21+
.orElse(null);
22+
}
23+
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package io.mzlnk.springframework.multitenant.oauth2.resourceserver.resolver.token;
2+
3+
import org.springframework.security.oauth2.server.resource.web.BearerTokenResolver;
4+
import org.springframework.security.oauth2.server.resource.web.DefaultBearerTokenResolver;
5+
6+
import javax.servlet.http.HttpServletRequest;
7+
8+
public class DefaultTokenResolver implements TokenResolver {
9+
10+
private final BearerTokenResolver resolver = new DefaultBearerTokenResolver();
11+
12+
@Override
13+
public String resolve(HttpServletRequest httpRequest) {
14+
return resolver.resolve(httpRequest);
15+
}
16+
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.mzlnk.springframework.multitenant.oauth2.resourceserver.resolver.token;
2+
3+
import javax.servlet.http.HttpServletRequest;
4+
5+
public interface TokenResolver {
6+
7+
String resolve(HttpServletRequest httpRequest);
8+
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package io.mzlnk.springframework.multitenant.oauth2.resourceserver.resolver.token;
2+
3+
import org.springframework.beans.factory.annotation.Value;
4+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.context.annotation.Primary;
8+
9+
@Configuration
10+
public class TokenResolverAutoConfiguration {
11+
12+
@Bean
13+
@Primary
14+
@ConditionalOnProperty(
15+
prefix = "oauth2.resource.server.token-resolver",
16+
name = "type",
17+
havingValue = "COOKIE")
18+
public TokenResolver cookieTokenResolver(@Value("${oauth2.resource.server.token-resolver.cookie-name:access_token}") String cookieName) {
19+
return new CookieTokenResolver(cookieName);
20+
}
21+
22+
@Bean
23+
public TokenResolver defaultTokenResolver() {
24+
return new DefaultTokenResolver();
25+
}
26+
27+
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
22
io.mzlnk.springframework.multitenant.oauth2.resourceserver.AutoConfiguration,\
3-
io.mzlnk.springframework.multitenant.oauth2.resourceserver.FactoriesAutoConfiguration
3+
io.mzlnk.springframework.multitenant.oauth2.resourceserver.FactoriesAutoConfiguration,\
4+
io.mzlnk.springframework.multitenant.oauth2.resourceserver.resolver.token.TokenResolverAutoConfiguration

0 commit comments

Comments
 (0)