Skip to content

Commit 9807d6d

Browse files
author
Felix.9127
committed
tech: Remove resource-server and custom oauth2-server build
spring-projects/spring-authorization-server#797
1 parent 4599e5c commit 9807d6d

File tree

14 files changed

+149
-162
lines changed

14 files changed

+149
-162
lines changed

.github/workflows/build.yml

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,6 @@ jobs:
1313
runs-on: ubuntu-latest
1414
steps:
1515
- uses: actions/checkout@v3
16-
- uses: actions/checkout@v3
17-
with:
18-
repository: "its-felix/spring-authorization-server"
19-
ref: "maven-publish"
20-
path: "spring-authorization-server"
21-
- name: "Set up JDK 8"
22-
uses: actions/setup-java@v3
23-
with:
24-
distribution: "adopt"
25-
java-version: "8"
26-
cache: "maven"
27-
- name: "Build spring-authorization-server"
28-
run: (cd spring-authorization-server && ./gradlew build publishToMavenLocal && cd .. && rm -rf spring-authorization-server)
2916
- name: "Set up JDK 16"
3017
uses: actions/setup-java@v3
3118
with:

.github/workflows/docker.yml

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,6 @@ jobs:
1010
runs-on: ubuntu-latest
1111
steps:
1212
- uses: actions/checkout@v3
13-
- uses: actions/checkout@v3
14-
with:
15-
repository: "its-felix/spring-authorization-server"
16-
ref: "maven-publish"
17-
path: "spring-authorization-server"
18-
- name: "Set up JDK 8"
19-
uses: actions/setup-java@v3
20-
with:
21-
distribution: "adopt"
22-
java-version: "8"
23-
cache: "maven"
24-
- name: "Build spring-authorization-server"
25-
run: (cd spring-authorization-server && ./gradlew build publishToMavenLocal && cd .. && rm -rf spring-authorization-server)
26-
- uses: actions/checkout@v3
2713
- name: "Set up JDK 16"
2814
uses: actions/setup-java@v3
2915
with:

pom.xml

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

77
<groupId>com.gw2auth</groupId>
88
<artifactId>oauth2-server</artifactId>
9-
<version>1.28.0</version>
9+
<version>1.29.0</version>
1010
<packaging>jar</packaging>
1111

1212
<parent>
@@ -48,7 +48,7 @@
4848
<dependency>
4949
<groupId>org.springframework.security</groupId>
5050
<artifactId>spring-security-oauth2-authorization-server</artifactId>
51-
<version>0.4.0-SNAPSHOT</version>
51+
<version>0.3.0</version>
5252
</dependency>
5353

5454
<dependency>

src/main/java/com/gw2auth/oauth2/server/adapt/Gw2AuthAuthenticationManagerResolver.java

Lines changed: 9 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,19 @@
11
package com.gw2auth.oauth2.server.adapt;
22

3-
import com.fasterxml.jackson.annotation.*;
4-
import com.gw2auth.oauth2.server.service.user.Gw2AuthTokenUserService;
3+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
4+
import com.fasterxml.jackson.annotation.JsonCreator;
5+
import com.fasterxml.jackson.annotation.JsonGetter;
6+
import com.fasterxml.jackson.annotation.JsonProperty;
57
import com.gw2auth.oauth2.server.service.user.Gw2AuthUserV2;
6-
import com.gw2auth.oauth2.server.util.Constants;
7-
import com.gw2auth.oauth2.server.util.CookieHelper;
8-
import org.springframework.security.authentication.AuthenticationManager;
9-
import org.springframework.security.authentication.AuthenticationManagerResolver;
108
import org.springframework.security.core.Authentication;
11-
import org.springframework.security.core.AuthenticationException;
129
import org.springframework.security.core.GrantedAuthority;
13-
import org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken;
14-
import org.springframework.security.oauth2.server.resource.InvalidBearerTokenException;
15-
import org.springframework.web.context.request.RequestContextHolder;
16-
import org.springframework.web.context.request.ServletRequestAttributes;
1710

18-
import javax.servlet.http.HttpServletRequest;
19-
import javax.servlet.http.HttpServletResponse;
2011
import java.util.Collection;
21-
import java.util.Objects;
22-
import java.util.Optional;
2312

24-
public class Gw2AuthAuthenticationManagerResolver implements AuthenticationManagerResolver<HttpServletRequest>, AuthenticationManager {
25-
26-
private final Gw2AuthTokenUserService gw2AuthTokenUserService;
27-
28-
public Gw2AuthAuthenticationManagerResolver(Gw2AuthTokenUserService gw2AuthTokenUserService) {
29-
this.gw2AuthTokenUserService = gw2AuthTokenUserService;
30-
}
31-
32-
@Override
33-
public AuthenticationManager resolve(HttpServletRequest context) {
34-
return this;
35-
}
36-
37-
@Override
38-
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
39-
if (authentication instanceof BearerTokenAuthenticationToken token) {
40-
return authenticate(token.getToken());
41-
} else {
42-
throw new IllegalArgumentException("expected BearerTokenAuthenticationToken");
43-
}
44-
}
45-
46-
private Authentication authenticate(String token) throws AuthenticationException {
47-
final Optional<Gw2AuthUserV2> optionalGw2AuthUser = this.gw2AuthTokenUserService.resolveUserForToken(token);
48-
if (optionalGw2AuthUser.isEmpty()) {
49-
clearCookie();
50-
throw new InvalidBearerTokenException("invalid session token");
51-
}
52-
53-
return new Gw2AuthUserAuthentication(optionalGw2AuthUser.get());
54-
}
55-
56-
private void clearCookie() {
57-
final ServletRequestAttributes servletRequestAttributes = Optional.ofNullable(RequestContextHolder.getRequestAttributes())
58-
.filter(ServletRequestAttributes.class::isInstance)
59-
.map(ServletRequestAttributes.class::cast)
60-
.orElseThrow();
61-
62-
final HttpServletRequest request = Objects.requireNonNull(servletRequestAttributes.getRequest());
63-
final HttpServletResponse response = Objects.requireNonNull(servletRequestAttributes.getResponse());
64-
65-
CookieHelper.clearCookie(request, response, Constants.ACCESS_TOKEN_COOKIE_NAME);
66-
}
13+
/*
14+
Not used but don't move / rename since the fully qualified classname is persisted for older entries
15+
*/
16+
public class Gw2AuthAuthenticationManagerResolver {
6717

6818
@JsonAutoDetect(
6919
fieldVisibility = JsonAutoDetect.Visibility.NONE,
@@ -72,7 +22,7 @@ private void clearCookie() {
7222
isGetterVisibility = JsonAutoDetect.Visibility.NONE,
7323
creatorVisibility = JsonAutoDetect.Visibility.NONE
7424
)
75-
private static class Gw2AuthUserAuthentication implements Authentication {
25+
public static class Gw2AuthUserAuthentication implements Authentication {
7626

7727
private final Gw2AuthUserV2 gw2AuthUser;
7828
private boolean isAuthenticated;
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package com.gw2auth.oauth2.server.adapt;
2+
3+
import com.gw2auth.oauth2.server.service.account.AccountFederationSession;
4+
import com.gw2auth.oauth2.server.service.user.Gw2AuthLoginUser;
5+
import com.gw2auth.oauth2.server.service.user.Gw2AuthTokenUserService;
6+
import com.gw2auth.oauth2.server.service.user.Gw2AuthUserV2;
7+
import com.gw2auth.oauth2.server.util.Constants;
8+
import com.gw2auth.oauth2.server.util.CookieHelper;
9+
import org.springframework.security.core.Authentication;
10+
import org.springframework.security.core.context.SecurityContext;
11+
import org.springframework.security.core.context.SecurityContextHolder;
12+
import org.springframework.security.core.context.SecurityContextImpl;
13+
import org.springframework.security.oauth2.jwt.Jwt;
14+
import org.springframework.security.oauth2.server.resource.web.BearerTokenResolver;
15+
import org.springframework.security.web.context.HttpRequestResponseHolder;
16+
import org.springframework.security.web.context.SecurityContextRepository;
17+
18+
import javax.servlet.http.HttpServletRequest;
19+
import javax.servlet.http.HttpServletResponse;
20+
import java.util.function.Supplier;
21+
22+
public class Gw2AuthSecurityContextRepository implements SecurityContextRepository {
23+
24+
private final Gw2AuthInternalJwtConverter jwtConverter;
25+
private final Gw2AuthTokenUserService gw2AuthTokenUserService;
26+
private final BearerTokenResolver bearerTokenResolver;
27+
28+
public Gw2AuthSecurityContextRepository(Gw2AuthInternalJwtConverter jwtConverter, Gw2AuthTokenUserService gw2AuthTokenUserService) {
29+
this.jwtConverter = jwtConverter;
30+
this.gw2AuthTokenUserService = gw2AuthTokenUserService;
31+
this.bearerTokenResolver = new CookieBearerTokenResolver(Constants.ACCESS_TOKEN_COOKIE_NAME);
32+
}
33+
34+
@Override
35+
public SecurityContext loadContext(HttpRequestResponseHolder requestResponseHolder) {
36+
SecurityContext context = loadContext(requestResponseHolder.getRequest()).get();
37+
if (context == null) {
38+
context = SecurityContextHolder.createEmptyContext();
39+
}
40+
41+
return context;
42+
}
43+
44+
@Override
45+
public Supplier<SecurityContext> loadContext(HttpServletRequest request) {
46+
return new SecurityContextSupplier(request);
47+
}
48+
49+
@Override
50+
public void saveContext(SecurityContext context, HttpServletRequest request, HttpServletResponse response) {
51+
final Authentication authentication = context.getAuthentication();
52+
if (authentication != null && authentication.isAuthenticated()) {
53+
final Object principal = authentication.getPrincipal();
54+
if (principal instanceof Gw2AuthLoginUser user) {
55+
final AccountFederationSession session = user.session();
56+
final Jwt jwt = this.jwtConverter.writeJWT(session.id(), session.creationTime(), session.expirationTime());
57+
CookieHelper.addCookie(request, response, Constants.ACCESS_TOKEN_COOKIE_NAME, jwt.getTokenValue(), jwt.getExpiresAt());
58+
}
59+
} else {
60+
CookieHelper.clearCookie(request, response, Constants.ACCESS_TOKEN_COOKIE_NAME);
61+
}
62+
}
63+
64+
@Override
65+
public boolean containsContext(HttpServletRequest request) {
66+
return loadContext(request).get() != null;
67+
}
68+
69+
private final class SecurityContextSupplier implements Supplier<SecurityContext> {
70+
71+
private final HttpServletRequest request;
72+
73+
private SecurityContextSupplier(HttpServletRequest request) {
74+
this.request = request;
75+
}
76+
77+
@Override
78+
public SecurityContext get() {
79+
SecurityContext securityContext = null;
80+
81+
final String jwtString = Gw2AuthSecurityContextRepository.this.bearerTokenResolver.resolve(this.request);
82+
if (jwtString != null) {
83+
final Gw2AuthUserV2 user = Gw2AuthSecurityContextRepository.this.gw2AuthTokenUserService.resolveUserForToken(jwtString).orElse(null);
84+
if (user != null) {
85+
securityContext = new SecurityContextImpl(new Gw2AuthAuthenticationManagerResolver.Gw2AuthUserAuthentication(user));
86+
}
87+
}
88+
89+
return securityContext;
90+
}
91+
}
92+
}

src/main/java/com/gw2auth/oauth2/server/configuration/OAuth2ServerConfiguration.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import org.springframework.security.config.annotation.web.configurers.SecurityContextConfigurer;
1919
import org.springframework.security.config.annotation.web.configurers.oauth2.client.OAuth2LoginConfigurer;
2020
import org.springframework.security.config.annotation.web.configurers.oauth2.server.authorization.OAuth2AuthorizationServerConfigurer;
21-
import org.springframework.security.config.annotation.web.configurers.oauth2.server.resource.OAuth2ResourceServerConfigurer;
2221
import org.springframework.security.config.http.SessionCreationPolicy;
2322
import org.springframework.security.oauth2.server.authorization.config.ProviderSettings;
2423
import org.springframework.security.web.SecurityFilterChain;
@@ -89,8 +88,7 @@ public SecurityFilterChain oauth2ServerHttpSecurityFilterChain(HttpSecurity http
8988
OAuth2AuthorizationServerConfigurer<HttpSecurity> configurer,
9089
Customizer<SecurityContextConfigurer<HttpSecurity>> securityContextCustomizer,
9190
Customizer<RequestCacheConfigurer<HttpSecurity>> requestCacheCustomizer,
92-
Customizer<OAuth2LoginConfigurer<HttpSecurity>> oauth2LoginCustomizer,
93-
Customizer<OAuth2ResourceServerConfigurer<HttpSecurity>> oauth2ResourceServerCustomizer) throws Exception {
91+
Customizer<OAuth2LoginConfigurer<HttpSecurity>> oauth2LoginCustomizer) throws Exception {
9492

9593
// This configuration is only for requests matched by the RequestMatcher
9694
// (that is, only OAuth2 AUTHORIZATION requests -> requests where this application acts as a OAuth2 server, not a client)
@@ -102,7 +100,6 @@ public SecurityFilterChain oauth2ServerHttpSecurityFilterChain(HttpSecurity http
102100
.securityContext(securityContextCustomizer)
103101
.requestCache(requestCacheCustomizer)
104102
.oauth2Login(oauth2LoginCustomizer)
105-
.oauth2ResourceServer(oauth2ResourceServerCustomizer)
106103
.apply(configurer);
107104

108105
return http.build();

0 commit comments

Comments
 (0)