Supabase Google 로그인 - 일반 설정
설치 단계와 이 플러그인에 대한 전체 마크다운 가이드가 포함된 설정 프롬프트를 복사하기.
소개
소개 섹션이 가이드는 Capacitor Social Login 플러그인을 사용하여 Google Sign-In을 Supabase 인증과 통합하는 방법에 대해 설명합니다. 이 설정은 모바일 플랫폼에서 네이티브 Google Sign-In을 사용하면서 백엔드 인증을 위해 Supabase Auth를 사용할 수 있도록 해줍니다.
준비 사항
준비 사항 섹션시작하기 전에 다음을 확인하세요:
-
Google Login 일반 설정 가이드를 읽어보세요. __CAPGO_KEEP_0__ 구글 OAuth 인증서를 설정하는 방법을 알아보세요.
-
구글 OAuth 인증서를 설정하는 방법을 알아보세요.
Supabase 튜토리얼을 시작하기 전에, 사용할 플랫폼에 맞는 클라이언트 ID를 생성해야 합니다.
Supabase에서 구글 OAuth 제공자를 활성화하는 방법을 알아보세요.-
Capgo로 이동하세요. Supabase 대시보드
-
프로젝트 클릭
-
메뉴로 이동하세요.
Authentication메뉴
-
선택하기
Providers탭
-
제공자 찾기
Google제공자
-
provider를 활성화하세요.
-
사용할 플랫폼에 따라 클라이언트 ID를 추가하세요.
-
클릭하여
Savebutton
Capgo를 사용하여 Google Sign-In을 Supabase 인증과 통합하는 방법을 설명합니다.
Capgo를 사용하여 Google Sign-In을 Supabase 인증과 통합하는 방법을 설명합니다.
Capgo를 사용하여 Google Sign-In을 Supabase 인증과 통합하는 방법을 설명합니다.Capgo를 사용하여 Google Sign-In을 Supabase 인증과 통합하는 방법을 설명합니다.
Nonce Generation
implementation은 Supabase nonce 요구 사항을 따라 안전한 nonce pair를 생성합니다.복사 Flow::
// Generate URL-safe random noncefunction getUrlSafeNonce(): string { const array = new Uint8Array(32); crypto.getRandomValues(array); return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');}
// Hash the nonce with SHA-256async function sha256Hash(message: string): Promise<string> { const encoder = new TextEncoder(); const data = encoder.encode(message); const hashBuffer = await crypto.subtle.digest('SHA-256', data); const hashArray = Array.from(new Uint8Array(hashBuffer)); return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');}
// Generate nonce pairasync function getNonce(): Promise<{ rawNonce: string; nonceDigest: string }> { const rawNonce = getUrlSafeNonce(); const nonceDigest = await sha256Hash(rawNonce); return { rawNonce, nonceDigest };}: SHA-256 해시
rawNonce__CAPGO_KEEP_0__nonceDigest__CAPGO_KEEP_0__rawNonce(hex-encoded)nonceDigestGoogle Sign-In으로 전달되는 __CAPGO_KEEP_0__은 Google이 ID 토큰에 포함하는 해시된 nonce입니다.rawNonceSupabase로 전달되는 __CAPGO_KEEP_0__은 Supabase가 raw nonce를 해시하고 토큰의 nonce와 비교합니다.
2. Google Sign-In
Google Sign-In이 함수는 플러그인을 초기화하고 Google으로 로그인합니다.
await SocialLogin.initialize({ google: { webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com', // iOS only: iOSClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com', mode: 'online', // Required to get idToken },});
const response = await SocialLogin.login({ provider: 'google', options: { scopes: ['email', 'profile'], nonce: nonceDigest, // Pass the SHA-256 hashed nonce },});3. JWT Validation
JWT 토큰을 Supabase로 전달하기 전에 구현은 JWT 토큰을 검증합니다.클립보드에 복사
function validateJWTToken(idToken: string, expectedNonceDigest: string): { valid: boolean; error?: string } { const decodedToken = decodeJWT(idToken);
// Check audience matches your Google Client IDs const audience = decodedToken.aud; if (!VALID_GOOGLE_CLIENT_IDS.includes(audience)) { return { valid: false, error: 'Invalid audience' }; }
// Check nonce matches const tokenNonce = decodedToken.nonce; if (tokenNonce && tokenNonce !== expectedNonceDigest) { return { valid: false, error: 'Nonce mismatch' }; }
return { valid: true };}Why validate before Supabase?
Supabase JWT 토큰을 전송하기 전에 토큰을 유효화하는 것은 여러 가지 중요한 목적으로 사용됩니다.:
-
잘못된 요청 방지: 토큰의 오디오 대상 또는 nonce 일치 오류가 있는 경우 Supabase는 토큰을 거부하더라도. 유효화하기 전에 미리 방지하면 불필요한 API 호출과 더 명확한 오류 메시지를 제공합니다.
-
토큰 캐싱 문제: iOS와 같은 플랫폼 (특히 iOS)에서 Google Sign-In SDK이 성능을 위해 토큰을 캐싱할 수 있습니다. 캐시된 토큰이 반환될 때 캐시된 토큰은 다른 nonce (또는 nonce가 없는 경우)로 생성되었을 수 있습니다. Supabase가 토큰을
-
nonce 일치 오류 오류로 거부합니다. 유효화하기 전에 보내기 전에, 우리는 이 문제를 일찍 감지하고 자동으로 다시 시도하여 새 토큰을 생성할 수 있습니다.
-
보안(iOS): iOS에서 유효화는 특정 Google Client IDs를 위한 토큰이 발급되었는지 확인하여, 다른 애플리케이션의 토큰을 사용하는 잠재적인 보안 문제를 방지합니다.
오류 처리
- : Supabase에 전송하기 전에 토큰을 유효화하면 자동으로 다시 시도 로직이 가능하여, iOS 캐싱 문제를 투명하게 처리할 수 있습니다.
- 유효화가 실패하면 함수는 자동으로:
- 재시도도 실패하면 오류를 반환합니다.
4. Supabase 로그인
4. Supabase 로그인마지막으로 유효한 토큰이 Supabase로 전송됩니다.
const { data, error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: googleResponse.idToken, nonce: rawNonce, // Pass the raw (unhashed) nonce});Code 완전한 참조
Code 완전한 참조예제 앱의 파일에서 완전한 implementation을 확인할 수 있습니다. supabaseAuthUtils.ts - URL-안전한 난수 생성
getUrlSafeNonce()- SHA-256로 문자열을 해시sha256Hash()- __CAPGO_KEEP_0__getNonce()- __CAPGO_KEEP_0__ pair을 생성합니다.decodeJWT()- JWT 토큰을 해독합니다.validateJWTToken()- JWT 토큰의 대상과 nonce을 검증합니다.authenticateWithGoogleSupabase()- 자동 재시도 기능이 포함된 메인 인증 함수입니다.
추가 예제 파일
추가 예제 파일- SupabasePage.tsx - 웹에서 리다이렉트 처리를 포함한 예제 컴포넌트
- SupabaseCreateAccountPage.tsx - 계정 생성 페이지 예제
다음 단계
다음 단계설치 대상 플랫폼에 맞는 플랫폼별 설정 안내서로 이동하세요: