1+ package org .morib .server .global .config ;
2+
3+ import jakarta .servlet .http .HttpServletRequest ;
4+ import jakarta .servlet .http .HttpServletResponse ;
5+ import lombok .extern .slf4j .Slf4j ;
6+ import org .springframework .security .oauth2 .client .web .AuthorizationRequestRepository ;
7+ import org .springframework .security .oauth2 .client .web .HttpSessionOAuth2AuthorizationRequestRepository ;
8+ import org .springframework .security .oauth2 .core .endpoint .OAuth2AuthorizationRequest ;
9+ import org .springframework .security .oauth2 .core .endpoint .OAuth2ParameterNames ;
10+
11+ @ Slf4j
12+ public class DebugOAuth2AuthorizationRequestRepository implements AuthorizationRequestRepository <OAuth2AuthorizationRequest > {
13+
14+ private final HttpSessionOAuth2AuthorizationRequestRepository delegate = new HttpSessionOAuth2AuthorizationRequestRepository ();
15+
16+ @ Override
17+ public OAuth2AuthorizationRequest loadAuthorizationRequest (HttpServletRequest request ) {
18+ log .info ("=== loadAuthorizationRequest DEBUG START ===" );
19+ log .info ("Request URI: {}" , request .getRequestURI ());
20+ log .info ("Request Method: {}" , request .getMethod ());
21+ log .info ("Session ID: {}" , request .getSession (false ) != null ? request .getSession (false ).getId () : "NO SESSION" );
22+
23+ // 1. State 파라미터 확인
24+ String stateParameter = request .getParameter (OAuth2ParameterNames .STATE );
25+ log .info ("1. State parameter from request: {}" , stateParameter );
26+
27+ if (stateParameter == null ) {
28+ log .error ("❌ State parameter is NULL - returning null" );
29+ return null ;
30+ }
31+
32+ // 2. 실제 delegate에서 Authorization Request 찾기
33+ OAuth2AuthorizationRequest authorizationRequest = delegate .loadAuthorizationRequest (request );
34+ log .info ("2. Authorization request from session: {}" , authorizationRequest != null ? "FOUND" : "NULL" );
35+
36+ if (authorizationRequest == null ) {
37+ log .error ("❌ Authorization request NOT FOUND in session - returning null" );
38+ return null ;
39+ }
40+
41+ // 3. State 비교
42+ String sessionState = authorizationRequest .getState ();
43+ log .info ("3. State comparison:" );
44+ log .info (" Request state: {}" , stateParameter );
45+ log .info (" Session state: {}" , sessionState );
46+ log .info (" States equal: {}" , stateParameter .equals (sessionState ));
47+
48+ boolean statesMatch = stateParameter .equals (sessionState );
49+ if (!statesMatch ) {
50+ log .error ("❌ State MISMATCH - returning null" );
51+ log .error (" Request state length: {}" , stateParameter .length ());
52+ log .error (" Session state length: {}" , sessionState .length ());
53+ // 첫 50자만 비교 로깅
54+ log .error (" Request state (first 50): {}" , stateParameter .length () > 50 ? stateParameter .substring (0 , 50 ) + "..." : stateParameter );
55+ log .error (" Session state (first 50): {}" , sessionState .length () > 50 ? sessionState .substring (0 , 50 ) + "..." : sessionState );
56+ return null ;
57+ }
58+
59+ log .info ("✅ All checks passed - returning authorization request" );
60+ return authorizationRequest ;
61+ }
62+
63+ @ Override
64+ public void saveAuthorizationRequest (OAuth2AuthorizationRequest authorizationRequest , HttpServletRequest request , HttpServletResponse response ) {
65+ log .info ("=== saveAuthorizationRequest DEBUG ===" );
66+ log .info ("Session ID: {}" , request .getSession (true ).getId ());
67+ log .info ("State being saved: {}" , authorizationRequest != null ? authorizationRequest .getState () : "NULL" );
68+ log .info ("Registration ID: {}" , authorizationRequest != null ? authorizationRequest .getAttribute ("registration_id" ) : "NULL" );
69+
70+ delegate .saveAuthorizationRequest (authorizationRequest , request , response );
71+ log .info ("✅ Authorization request saved successfully" );
72+ }
73+
74+ @ Override
75+ public OAuth2AuthorizationRequest removeAuthorizationRequest (HttpServletRequest request , HttpServletResponse response ) {
76+ log .info ("=== removeAuthorizationRequest DEBUG ===" );
77+ OAuth2AuthorizationRequest result = delegate .removeAuthorizationRequest (request , response );
78+ log .info ("Remove result: {}" , result != null ? "SUCCESS" : "NULL" );
79+ return result ;
80+ }
81+ }
0 commit comments