구글 시그니인이 빠른 통합이 되어야 할 것 같은데, 대신 인증 화면을 보면서 클라이언트 시크릿이 왜 하나의 앱 타입에서만 제공되는지 궁금해하는 것입니다. 이 혼란은 normal합니다. 특히 Capacitor, 이온, 전자, 또는 혼합 웹 및 네이티브 스택을 사용하여 빌드하는 경우尤其 그렇습니다.
실제 구현을 깨는 부분은 대부분의 가이드가 생략하는 것입니다: Google Client IDs는 플랫폼에 따라 다릅니다., 그리고 웹 앱이 아닌 타입은 종종 없습니다. 잘못된 인증서만 생성하여 비밀 키를 강제로 흐름에 넣으려 할 때
일반적으로 오류가 발생하여 디버깅이 더 어려워집니다.
- 내용목록
- 앱을 Google 생태계와 연결하는 방법
- 실무에서 클라이언트 ID Google의 위치
- 플랫폼별 클라이언트 ID 설정
- 구글 API 인증 정보를 안전하게 관리하는 방법
- 클라이언트 ID 오류를 해결하는 방법
구글 생태계와 앱을 연결하는 방법
많은 팀이 이 문제를 동시에 마주하게 된다. 그들은 구글과 함께 로그인하세요또는 사용자 인증을 승인하기 위해 드라이브나 캘린더와 같은 것에 접근하고 API 키가 suddenly 더 이상 충분하지 않습니다.
사용자 로그인 및 위임된 접근이 OAuth를 통해 실행되기 때문입니다. 구글은 앱을 식별할 방법이 필요합니다. 그것은 __CAPGO_KEEP_0__가 호출되는 것만이 아닙니다., not just the API being called. The credential that does that is the 다중 플랫폼 코드베이스에서 작업 중이라면 혼란이 빨리 심해집니다. 웹 프론트엔드, 안드로이드 셸, iOS 앱, 그리고 데스크톱용 일렉트론 빌드가 공유될 수 있습니다. 그들은 제품 브랜딩과 백엔드 로직을 공유할 수 있지만 OAuth 식별성을 공유해서는 안 됩니다..
실용적인 OAuth 설정은 일반적으로 몇 가지 구현 질문으로 귀결됩니다.
어떤 애플리케이션 유형을 생성해야 합니까
- 클라이언트 시크릿이 필요합니까
- redirect URI 또는 origin이 정확히 일치해야 하는지
- 모바일 및 웹 흐름을 혼합하지 않고 인증서를 연결하는 방법
- redirect URI 또는 origin이 정확히 일치해야 하는지
- Why a flow that works in the browser fails inside a native wrapper
실용적인 규칙: 앱이 사용자 권한 또는 로그인 요청을 하는 경우, OAuth 클라이언트 유형을 생각하는 대신 API 키를 시작하세요.
그 distinction은 시간을 절약하고, 콘솔이 더 많은 field를 보여주기 때문에 웹 인증서만으로 모바일 로그인 흐름을 구축하는 일반적인 오류를 방지합니다. Capacitor 앱에서 이 기능을 implement하는 경우, 이 가이드는 Capacitor 앱에서 OAuth2 은 앱 측 흐름에 유용한 동반자입니다.
What Is a Google Client ID
A Google OAuth 2.0 client ID Google의 인증 시스템에서 애플리케이션의 공개 식별자입니다. Google은 액세스 토큰을 요청할 때 인증 엔드포인트에서 애플리케이션의 고유 이름으로 설명하며, API 키와 구별되는 점은 OAuth 흐름에서 앱의 신원을 확인하는 토큰 교환 중에 사용되는 것입니다. 이는 Google Cloud의 OAuth 클라이언트 문서에서 설명합니다. Google Client ID는 애플리케이션의 고유 식별자와 보안层입니다..

간단한 정신 모델
앱의 Google 클라이언트 ID 문제는 앱의 공개된 사용자 이름.
Google에게 "이 요청은 이 등록된 애플리케이션에서 오고 있다."라고 말합니다. 이게 로그인, 동의, 토큰 교환, 사용자 이름을 대신하여 앱이 요청하는 모든 흐름에서 중요합니다. 클라이언트 ID는 앱과 Google의 인증 서버 모두가 참조해야 하는 값입니다.
이러한 자격 증명이 사람들을 혼란스럽게 하는 이유는 이 자격 증명이 두 가지 다른 개념과 함께 함께 있기 때문입니다.
클라이언트 ID OAuth에서 앱을 식별합니다.
API 키 API 호출에서 사용자 인증이 포함되지 않는 경우 프로젝트를 식별합니다.
클라이언트 비밀 은 비밀스러운 대조물로, 안전하게 비밀을 숨길 수 있는 흐름과 앱 유형에서만 사용됩니다.
많은 깨진 통합은 누군가가 이들을 동일한 것의 변형으로 다루기 시작할 때 시작됩니다. 그들은 아니다.
구글 클라이언트 ID가 실제로 어디에 위치하는지
만약에 구글에 로그인 또는 구글 클라이언트 ID를 사용하여 앱을 식별하고 사용자에게 앱을 대표하는 동의 화면을 사용하세요.한 번에
클라이언트 ID는 프론트엔드가 인증 핸드셰이크를 시작하기 위해 사용하는 값입니다. 구글의 문서에도 앱이 Cloud Console에 등록되어 있어야 인증을 생성할 수 있으며 웹 앱은 전체 스킴과 호스트 이름을 포함한 허용된 자바스크립트 원본 또는 리다이렉트 URI를 구성해야 한다고 언급하고 있습니다.
구글이 액세스를 허용하는 것만 아니라, 인증 요청을 알려진 앱 식별성과 결합하는 것입니다.
- 하이브리드 앱을 개발하는 팀에게 가장 안전한 정신 모델은 다음과 같습니다.
- 클라이언트 ID를 사용하여 앱을 식별하고 사용자에게 앱을 대표하는 동의 화면을 사용하세요.
- 올바른 앱 유형을 사용하여 비밀을 흐름에 포함시키는지 결정하세요.
앱 식별성과 위임된 접근 권한이 어떻게 연결되는지 더 넓은 개요를 원한다면 이 앱 인증화면 은 좋은 리프레셔입니다.
클라이언트 ID를 만들고 보는 방법
콘솔 경로가 변경되었습니다. 개발자는 종종 잘못된 곳에 있다고 생각합니다. Google은 현재 이러한 자격 증명에 대한 두 가지 탐색 경로를 노출하고 있습니다: 새로운 Google Auth Platform > Clients 경로와 더 오래된 APIs & Services > Credentials 경로, Google의 설정 문서.

__CAPGO_KEEP_0__
Google Cloud Console에서 시작하여 프로젝트를 선택하거나 생성하세요. 인증 설정을 여러 프로젝트에 흩어지게 하면 후에 감사 및 지원이 고통스러울 것입니다.
그곳에서 다음 중 하나로 이동하세요:
- Google Auth Platform > 클라이언트
- APIs & Services > 자격 증명
If your team sees different navigation labels, that’s expected. Google has been separating identity setup from the rest of the API credential surface.
자격 증명을 생성하세요. 자신을 한정짓지 마세요.
새 OAuth 클라이언트를 생성할 때 가장 큰 결정은 애플리케이션 유형입니다. Google은 특정 유형을 선택하도록 요청합니다. 웹, 안드로이드, iOS, 또는 데스크톱. 이 선택은 단순히 외관을 결정하는 것이 아니라 앱의 식별과 필요한 지원 구성에 영향을 미칩니다.
웹 앱의 경우 다음을 기대하십시오:
- 인증된 자바스크립트 원본
- 인증된 리다이렉션 URI
이 값은 정확해야 합니다. 웹 자격 증명에 대한 경우, Google은 전체 스킴과 호스트 이름을 기대합니다. 예를 들어 https://www.example.com, 대신/loose 도메인 개념
모바일 플랫폼의 경우 형태는 다릅니다. Android 등록은 패키지 수준의 식별성과 소유권 확인이 필요하며, iOS는 플랫폼 식별자만 사용합니다. Google 인증을 다른 인증层와 combination하는 경우 이 Capacitor Supabase의 social login 설정은 이러한 조각이 종종 어떻게 함께 작동하는지 보여주는 유용한 예입니다. is a useful example of how these pieces often fit together.
이 walkthrough은 UI를 비교하고 클릭하는 동안 사용할 수 있는 합리적인 시각적 참조입니다.
이후 찾을 수 있는 곳
클라이언트 ID가 프로젝트의 자격 증명 목록에 표시되며, 동일한 프로젝트 공간에서 팀이 API를 활성화하고 OAuth 식별성을-consent 화면에 연결하는 방법을 볼 수 있습니다. 등록된 애플리케이션 이름은 사용자가 권한 요청 화면에서 볼 수 있는 이름입니다. 이는 앱 이름을 정확하게 지정하는 이유 중 하나입니다.
Google은 이러한 자격 증명을 시간이 지남에 따라 관리할 수 있도록 합니다. 클라이언트 ID를 복사하고 설정을 검토하고, 해당 자격 증명과 관련된 클라이언트 시크릿을 관리할 수 있습니다.
consent 화면은 장식이 아닙니다. 그것은 신뢰 경계의 일부입니다. 사용자는 애플리케이션 이름을 보게 되며, 내부 프로젝트의 별칭이 아닙니다.
플랫폼별 클라이언트 ID 구성
Google 로그인 설정을 깨트리기 가장 빠른 방법은 하나의 클라이언트 ID가 모든 플랫폼을 커버할 수 있다고 가정하는 것입니다. 그러나 그것은 할 수 없습니다. 다중 플랫폼 앱의 경우, 각 플랫폼은 자신의 고유한 OAuth 2.0 클라이언트 ID를 등록해야 하며, Android 설정은 SHA1 지문이 소유권을 확인하기 위해 필요합니다. 이 플랫폼 설정 참조.
왜 하나의 앱이 여러 클라이언트 ID가 필요합니까?
사용자는 앱을 하나로 보지만, Google에선 여러 OAuth 클라이언트로 보입니다.
A 웹 앱그것은, Android 빌드그것은, iOS 빌드그것은, 데스크톱 앱 보안 속성을 제공하지 않는다. 그것은 동일한 방식으로 신원을 증명하지 않으며, 신뢰할 수 있는 환경에서 모든 인증서를 저장하지도 않는다. Google은 각 플랫폼에 독립적인 앱 등록 모델을 제공하여 이를 해결한다.
그것은 좋은 보안 관행이다. 만약 하나의 플랫폼의 인증서 설정이 취약하거나 잘못 구성되었다면 다른 플랫폼은 자동으로 노출되지 않는다.
다음과 같이 실제적인 분리는 다음과 같다:
- 웹 웹 클라이언트 ID와 엄격한 원본 및 리다이렉트 URI 매칭을 사용한다.
- Android Android 클라이언트 ID는 패키지 식별성과 SHA1 지문과 연결됩니다.
- iOS iOS 클라이언트 ID는 앱의 번들 식별성과 연결됩니다.
- Desktop or Electron Desktop 스타일 OAuth 패턴을 사용하는 경우, 설치된 OAuth 패턴을 사용하는 경우가 많습니다.
Google Client ID 유형 비교
| 애플리케이션 유형 | 주 식별자 | 클라이언트 시크릿 제공 여부 | 주 용도 |
|---|---|---|---|
| 웹 | 인증된 자바스크립트 원본 및 리다이렉션 URI | 보통 yes | 브라우저 앱과 백엔드 지원 웹 OAuth |
| 안드로이드 | 패키지 식별자 + SHA1 지문 | 보통 no | 네이티브 안드로이드 로그인 |
| iOS | 앱 번들 식별자 | 보통 no | 네이티브 아이폰 및 아이패드 로그인 |
| 데스크톱 | 설치된 앱 식별자 | 주로 안 | 데스크톱 앱, Electron-style 네이티브 흐름 포함 |
모바일 및 데스크톱용 클라이언트 비밀의 역설
이것은 많은 튜토리얼이 틀린 부분입니다.
모바일 및 데스크톱 개발자들은 일반적으로 OAuth 클라이언트가 클라이언트 ID와 클라이언트 비밀을 모두 제공하는 것으로 기대합니다. 그들은 콘솔에서 비밀을 볼 수 있는 유일한 방법이 Web Application credential이기 때문에 그러한 클라이언트 ID와 클라이언트 비밀을 생성합니다. 흐름이 더 완전하게 보이므로 그들이 계속 진행합니다. 나중에 인증이 혼란스럽게 실패합니다. 따라서 Capgo __CAPGO_KEEP_0____CAPGO_KEEP_0__ __CAPGO_KEEP_0__ __CAPGO_KEEP_0__
__CAPGO_KEEP_0__ 이 설명은 모바일 인증서 불일치에 대한 것입니다.Google은 사용자가 인증서를 추출할 수 있는 클라이언트 측 소프트웨어에 비밀을 포함시키지 않으려는 이유로, 웹 애플리케이션 이외의 애플리케이션 유형(예: 안드로이드, iOS, 설치된 앱)에서 클라이언트 ID만 받고 클라이언트 시크릿을 받지 않도록 의도합니다.
그 디자인 선택은 올바릅니다. 모바일 앱이나 Electron 배포본은 비밀을 안전하게 저장하는 안전한 장소가 아닙니다.
이것이 작동하는 방법: 공개 클라이언트를 위한 클라이언트 측 OAuth 흐름
이것이 작동하지 않는 방법: 모바일 앱을 위해 웹 인증서를 만들어서 implementation에 비밀을 강제하는 것
Capacitor 팀에서, 이것은 두 가지 나쁜 패턴 중 하나로 나타납니다:
- 앱은 웹 클라이언트 를 사용하여 브라우저 기반 흐름을 시작하고
- 앱은 구글 __CAPGO_KEEP_0__ 인증 정보 code이 포함된 패키지에서부터 secret를 숨기려는 시도는 secret가 숨겨져 있는 것의 목적을 무효화한다.
더 나은 접근 방식은 모바일 및 데스크톱 앱을 공공 클라이언트로 다루는 것이다. 공공 클라이언트. 현대 OAuth에서 일반적으로는 secret가 클라이언트 내부에 숨겨지지 않는 흐름을 사용한다. 백엔드가 참여하는 경우, 백엔드에서 비밀을 숨기고 네이티브 앱은 공공 클라이언트가 수행해야 하는 것만 수행하도록 한다.
또 다른 중요한 점은 Firebase-backed Android 로그인 설정에서 중요하다. 이 경우, 웹 애플리케이션 타입 클라이언트 ID가 백엔드 서버의 OAuth 클라이언트 ID로 사용되며 Android 앱은 자신의 플랫폼에 특정한 식별성을 유지한다. 이 분리는 팀이 두 개의 웹 인증 정보와 모바일 인증 정보를 같은 프로젝트에서 볼 때 혼란을 일으킨다. 하나가 다른 것을 대체하는 것으로 착각한다. 그렇지 않다. 그들은 서로 다른 역할을 한다. 만약 하나의 규칙을 기억한다면, __CAPGO_KEEP_0__가 실행되는 위치에 맞는 클라이언트 타입을 선택하라. 원하는 인증 정보 형태가 아닌. 구글 __CAPGO_KEEP_0__ 인증 정보를 안전하게 관리하는 방법
OAuth 관련 사고의 대부분은 복잡한 공격이 아닌 인증 정보를 유출하는 경우, 리다이렉트 설정을 너무 넓게 설정하는 경우, 또는 secret를 안전하지 않은 곳에 넣는 경우이다. code.
API
__CAPGO_KEEP_0__
Google의 OAuth 지침은 클라이언트 ID 및 비밀 키를 개인 데이터로 다루어야 한다고 강조하며, 웹 앱의 경우 클라이언트 ID는 미리 등록된 리다이렉트 URI에 대해 강제 적용됩니다. 리다이렉트 URI가 엄격하게 일치하지 않으면 Google은 요청을 거부합니다. 이 원본 바인딩은 토큰 추적 방지에 대한 보호의 일부로, OAuth.com의 클라이언트 등록 지침에 설명되어 있습니다. OAuth.com의 클라이언트 등록 지침.

즉시 잠그해야 할 것
만약에 몇 가지 일을 정확하게 하려면, 다음을 하세요:
- 앱 code에 클라이언트 비밀 키를 배포하지 마세요. 웹 번들, 모바일 바이너리, Electron 패키지는 사용자들이 검사할 수 있습니다.
- 정확한 리다이렉트 URI를 등록하세요. 가까운 것은 충분하지 않습니다. Google은 웹 흐름에 대해 엄격한 일치 검증을 수행합니다.
- 원본을 좁게 유지하세요. 설치의 마찰을 피하기 위해 넓은 도메인을 허용하지 마세요.
- 플랫폼 자격 증명을 분리하세요. 안드로이드, iOS, 웹을 하나의 자격증으로 밀지 마세요.
운영상의 한 가지 세부 사항은 쉽게 놓치기 쉬운 것입니다. Google은 기존 클라이언트 ID에 새로운 비밀을 생성하고 이전 비밀을 비활성화할 수 있습니다. 이는 비밀 노출 시나 배포 프로세스를 강화할 때 중요합니다.
보안한 팀이 실제로 무엇을 하는지
위험을 피하는 팀은 OAuth 자격 증명을 다른 프로덕션 비밀처럼 다룹니다.
그들은 웹 클라이언트 비밀을 백엔드에 보관하고 환경 관리를 통해 주입하고 콘솔 접근 권한을 감사합니다. 릴리스 PIPELINE을 정리하는 경우, 이 가이드에 대한 적용은 인증 설정에도 가치가 있습니다. CI/CD PIPELINE에서 비밀 관리 그들은 또한 메타데이터를 검토합니다. OAuth 동의 화면은 사용자가 보는 클라이언트 ID와 관련이 있습니다. 애플리케이션 이름이 모호하거나 속이는 경우, 사용자는 오류를 신뢰하거나 잘못된 애플리케이션을 승인할 가능성이 높습니다.
보안은 비밀을 숨기기만 하는 것이 아닙니다. 올바른 애플리케이션 ID, 리다이렉트 목표, 승인 화면이 매번 일치하는지 확인하는 것입니다.
클라이언트 ID 오류를 해결하는 방법
대부분의 Google OAuth 오류는 설정상의 작은 오류로 인한 것입니다. 오류 메시지는 항상 친절하지 않지만, 문제의 근본 원인은 일반적으로 해결 방법을 알면 쉽게 파악할 수 있습니다.
대부분의 오류를 해결하는 방법
대부분의 Google OAuth 오류는 설정상의 작은 오류로 인한 것입니다. 오류 메시지는 항상 친절하지 않지만, 문제의 근본 원인은 일반적으로 해결 방법을 알면 쉽게 파악할 수 있습니다.
redirect_uri_mismatch
앱이 등록된 웹 클라이언트와 정확히 일치하지 않는 리다이렉트 URI를 보내고 있습니다. scheme, host, path 및尾隨 차이점을 확인하십시오. 웹 OAuth에서 정확한 일치가 보안 모델의 일부입니다.
invalid_client
이것은 일반적으로 앱이 잘못된 클라이언트 ID를 보내거나, 잘못된 비밀 키를 보내거나, 플랫폼 간에 인증 정보를 혼용하는 경우입니다. 예를 들어, Android 또는 iOS 흐름이 잘못된 위치에서 웹 인증 정보를 사용하는 경우가 있습니다.
invalid_request
이것은 광범위한 문제지만, 크로스 플랫폼 앱에서 일반적으로 인증 매개 변수가 잘못된 경우나 클라이언트 유형에 맞지 않는 흐름을 사용하는 경우를指示합니다. 앱이 비밀 키를 포함하려고 할 때, 또는 선택한 OAuth 흐름이 다른 종류의 클라이언트를 기대하는 경우를 확인하십시오.
Google Sign-In은 웹에서 작동하지만 모바일에서 실패합니다.
첫 번째로 검사해야 하는 것은 클라이언트 유형입니다. 모바일 개발자의 가장 일반적인 오류 원인은 웹 애플리케이션 클라이언트 ID를 생성하여 클라이언트 비밀 키를 얻으려고 할 때, 실제로 Android 또는 iOS 유형을 사용해야 한다는 것입니다. 이에 대한 자세한 설명은 클라이언트 비밀 키 일치 오류의 해설에서 확인할 수 있습니다. 만약 인증 후 토큰 라이프 사이클 작업이 포함된 경우,
인증 후 토큰 취소 가이드
도 유용합니다.
Android 인증이 인증 생성 후 실패합니다. Android 클라이언트에 첨부된 SHA1 지문이 올바르지 않으면, 앱이 Google이 기대하는 소유권을 증명하지 못합니다.
OAuth 설정에서 콘솔에 첨부된 애플리케이션 이름과 브랜딩을 확인하세요. 사용자는那里에서 볼 수 있는 것을 승인하므로 잘못된 메타데이터는 신뢰 문제와 지원 소음으로 이어집니다.
실제 디버깅 순서는 간단합니다: 클라이언트 유형을 먼저 확인한 다음 리다이렉트 설정, 플랫폼 식별자, 비밀 키가 흐름에 포함되어야 하는지 여부를 확인하세요.
팀이 Capacitor 또는 Electron 앱을 배포한다면, 인증 오류는 거의 고립되지 않고 일반적으로 릴리스 압박, 롤백 필요, 환경에 따라서 고쳐야 하는 문제와 함께 표면화됩니다. Capgo helps teams ship targeted updates to app code and assets without waiting on store review, which makes it much easier to correct login flows, callback handling, and client-side auth issues when they slip into production.