Skip to content

Commit a587810

Browse files
authored
fix: apple resolver 추가 (#382)
1 parent 37bfc69 commit a587810

2 files changed

Lines changed: 67 additions & 3 deletions

File tree

clokey-api/src/main/java/org/clokey/global/config/security/SecurityConfig.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.clokey.domain.auth.handler.OidcLoginSuccessHandler;
88
import org.clokey.domain.auth.service.CustomOAuth2UserService;
99
import org.clokey.domain.auth.service.JwtTokenService;
10+
import org.clokey.global.security.AppleAwareOAuth2AuthorizationRequestResolver;
1011
import org.clokey.global.security.JwtAuthenticationFilter;
1112
import org.clokey.helper.SpringEnvironmentHelper;
1213
import org.springframework.beans.factory.annotation.Autowired;
@@ -26,7 +27,6 @@
2627
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
2728
import org.springframework.security.crypto.password.PasswordEncoder;
2829
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
29-
import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizationRequestResolver;
3030
import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestCustomizers;
3131
import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver;
3232
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@@ -169,8 +169,8 @@ public OAuth2AuthorizationRequestResolver oauth2AuthorizationRequestResolver() {
169169
if (clientRegistrationRepository == null) {
170170
throw new IllegalStateException("ClientRegistrationRepository is required for OAuth2");
171171
}
172-
DefaultOAuth2AuthorizationRequestResolver resolver =
173-
new DefaultOAuth2AuthorizationRequestResolver(
172+
AppleAwareOAuth2AuthorizationRequestResolver resolver =
173+
new AppleAwareOAuth2AuthorizationRequestResolver(
174174
clientRegistrationRepository, "/oauth2/authorization");
175175
resolver.setAuthorizationRequestCustomizer(
176176
OAuth2AuthorizationRequestCustomizers.withPkce());
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package org.clokey.global.security;
2+
3+
import jakarta.servlet.http.HttpServletRequest;
4+
import lombok.RequiredArgsConstructor;
5+
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
6+
import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizationRequestResolver;
7+
import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver;
8+
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest;
9+
10+
@RequiredArgsConstructor
11+
public class AppleAwareOAuth2AuthorizationRequestResolver
12+
implements OAuth2AuthorizationRequestResolver {
13+
14+
private final DefaultOAuth2AuthorizationRequestResolver delegate;
15+
16+
public AppleAwareOAuth2AuthorizationRequestResolver(
17+
ClientRegistrationRepository clientRegistrationRepository,
18+
String authorizationBaseUri) {
19+
this.delegate =
20+
new DefaultOAuth2AuthorizationRequestResolver(
21+
clientRegistrationRepository, authorizationBaseUri);
22+
}
23+
24+
@Override
25+
public OAuth2AuthorizationRequest resolve(HttpServletRequest request) {
26+
OAuth2AuthorizationRequest authorizationRequest = delegate.resolve(request);
27+
return customizeIfApple(request, authorizationRequest);
28+
}
29+
30+
@Override
31+
public OAuth2AuthorizationRequest resolve(
32+
HttpServletRequest request, String clientRegistrationId) {
33+
OAuth2AuthorizationRequest authorizationRequest =
34+
delegate.resolve(request, clientRegistrationId);
35+
if (authorizationRequest == null) {
36+
return null;
37+
}
38+
return "apple".equals(clientRegistrationId)
39+
? OAuth2AuthorizationRequest.from(authorizationRequest)
40+
.additionalParameters(params -> params.put("response_mode", "form_post"))
41+
.build()
42+
: authorizationRequest;
43+
}
44+
45+
public void setAuthorizationRequestCustomizer(
46+
java.util.function.Consumer<OAuth2AuthorizationRequest.Builder>
47+
authorizationRequestCustomizer) {
48+
delegate.setAuthorizationRequestCustomizer(authorizationRequestCustomizer);
49+
}
50+
51+
private OAuth2AuthorizationRequest customizeIfApple(
52+
HttpServletRequest request, OAuth2AuthorizationRequest authorizationRequest) {
53+
if (authorizationRequest == null) {
54+
return null;
55+
}
56+
String requestUri = request.getRequestURI();
57+
if (requestUri != null && requestUri.endsWith("/apple")) {
58+
return OAuth2AuthorizationRequest.from(authorizationRequest)
59+
.additionalParameters(params -> params.put("response_mode", "form_post"))
60+
.build();
61+
}
62+
return authorizationRequest;
63+
}
64+
}

0 commit comments

Comments
 (0)