구글, 애플 로그인 이번엔 구글이 난리네? Flutter 간편로그인
특정 서비스(특히 Google 계정 로그인)에서 내장 WebView를 통한 로그인을 차단하면서, 문제가 발생했습니다.
Dec 11, 2024
Flutter WebView는 기본적으로 안드로이드에서는 크롬 브라우저, iOS에서는 사파리를 기반으로 동작합니다. 그러나, 특정 서비스(특히 Google 계정 로그인)에서 내장 WebView를 통한 로그인을 차단하면서, 문제가 발생했습니다.
대표적인 오류:
403 disallowed_useragent
이 오류는 앱 내장 WebView를 통한 로그인 시도를 차단하는 보안 정책에 따른 것으로, 내장 WebView 사용 시 Google과의 통신이 서드파티에 의해 변경될 위험이 있기 때문에 발생합니다. Google은 2021년 9월 30일부로 내장 WebView를 통한 로그인을 허용하지 않도록 정책을 강화했습니다.
브라우저에게 너는 cup가 iphone 이고 이 브라우저는 사파리란다라고 속여버리기! 🤔
근데 이젠 브라우저 신뢰를 할 수 없다고 하다가 되다가 안되다 이상한 webview 구글에서
이건 빠스인데
하고 거절해버리는 상황…
현재 상황은 WebView의 User-Agent를 iOS Safari 브라우저와 동일하게 설정하더라도, Google의 보안 정책에 의해 신뢰할 수 없는 브라우저로 간주되거나, 간헐적으로 작동이 불안정한 상태입니다. Google은 이를 보안 위험으로 간주하여 점점 더 엄격한 정책을 적용하고 있습니다. 이로 인해 "WebView로는 불가능하다"는 메시지가 나오는 경우가 많아졌습니다.
문제 원인
User-Agent 스푸핑 한계:
// User agent string을 iOS Safari 브라우저처럼 설정 (웹사이트에서 네이티브 앱처럼 인식 가능) userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1',
- User-Agent를 수정하여 WebView가 Safari처럼 보이도록 설정했지만, Google은 단순히 User-Agent만으로 브라우저의 신뢰성을 평가하지 않습니다.
- 브라우저 환경(쿠키, 세션 유지 방식, 인증 프로토콜 등)도 검사하므로 WebView는 결국 신뢰할 수 없는 환경으로 판단됩니다.
Google의 정책 강화:
- Google은 내장 WebView를 통한 OAuth 로그인을 2021년 이후부터 차단하기 시작했습니다.
- 이는 서드파티 앱이 Google 계정과의 민감한 통신을 조작하거나 가로챌 위험이 있기 때문입니다.
간헐적 성공 이유:
- 일부 서비스는 User-Agent 기반으로만 브라우저를 식별하기 때문에 동작하는 경우도 있습니다.
- 하지만 Google의 OAuth 인증은 환경 전반을 평가하므로 안정적인 작동을 보장하지 못합니다.
Google의 정책 변경으로 인해 WebView를 통한 Google 계정 로그인은 현실적으로 불가능하다는게 결국 개발자인 나의 … 종착지였다…
- WebView 대신 외부 브라우저 또는 Custom Tabs/Safari ViewController를 사용하던가
- Google Sign-In 패키지를 활용하여 로그인을 처리하던가
- Redirect 설정으로 OAuth 인증 결과를 앱에 전달하던가…
결국, 개발 시간을 잡아 바로 시작해야 하는 상황이 되었다. 난 또다시 모든 계획을 뒤집고 처음부터 다시 작업해야 하는 상황에 직면했다.
이런 상황이 익숙하지 않은 건 아니지만, 그럼에도 매번 새로 마주할 때마다 쉽지 않다는 걸 실감한다. 하지만 개발자라면 피할 수 없는 일이기도 하다…
이번에도 문제를 해결하기 위해 고민하고, 부딪히고, 다시 도전하며 더 나은 결과물을 만들어내야 한다. 이런 과정이 결국 성장으로 이어진다는 걸 알기에, 또다시 몰입의 시간을 시작하려 한다. 한 번 더!
Share article