You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[P2] [서버 연동] 구글 로그인이 가끔 실패한다 — 구글이 PKCE code_verifier 불일치로 거절 (Invalid code verifier) #665
POST /v1/auth/oauth/google 1회만 오고 실패, 3분 뒤 구글 로그인 성공 기록 있음(같은 사용자인지는 확정 못 함)
Invalid code verifier 는 인가 코드를 받을 때 쓴 PKCE code_challenge 와, 서버로 보낸 codeVerifier 가 맞지 않을 때 구글이 돌려주는 값입니다. 코드가 만료됐거나 이미 쓴 코드면 다른 메시지(Bad Request/Malformed auth code)가 옵니다.
서버는 앱이 보낸 codeVerifier 를 그대로 전달만 하므로, 앱이 인가 요청과 다른 verifier 를 보낸 경우입니다.
앱에서 확인해 주실 것
OAuthActivity.authorizeGoogle() 에서 인가 요청(AuthorizationRequest)과 결과를 짝짓는 부분이 의심됩니다.
googleRequest 는 savedInstanceState 에서 복원되고, 복원된 요청이 없으면 새 요청(새 verifier) 을 만들어 Custom Tab 을 다시 띄웁니다.
Custom Tab 이 떠 있는 동안 OAuthActivity 가 저장 상태 없이 다시 만들어지면(예: 로그인 화면이 OAuthActivity 를 한 번 더 띄움, 구글 버튼 연타) 요청이 두 개가 됩니다. 이때 먼저 띄운 탭의 결과(코드 A)가 나중 요청의 verifier B 와 짝지어질 수 있습니다.
코드에는 이렇게 쓰여 있습니다: codeVerifier = request.codeVerifier. 결과 response.request.codeVerifier 가 아니라 현재 Activity 의 request 를 씁니다. 이 경로라면 AppAuth 응답에 실린 원래 요청(response.request)의 verifier 를 쓰는 편이 안전합니다.
Activity