Supabase Auth Advanced: OAuth, Magic Link, MFA, and RLS

개요

Supabase Auth Advanced는 OAuth, Magic Link, MFA, RLS 등 프로덕션 환경에서 중요한 인증 패턴을 다룹니다.

주요 내용

* OAuth (Google/GitHub): Flutter SDK v2에서는 PKCE 흐름을 사용하여 Google OAuth 로그인을 지원하며, 웹이 아닌 경우 io.supabase.myapp://login-callback과 같은 딥 링크 설정을 통해 콜백 처리를 합니다. Google Cloud Console에서 Client ID와 Secret을 발급받고 Supabase 프로젝트의 리디렉션 URI를 설정해야 합니다.
* Magic Link (Passwordless): 이메일 주소로 로그인 링크를 전송하고, 사용자가 해당 링크를 클릭하면 supabase.auth.onAuthStateChange를 통해 세션을 수신하여 인증을 완료할 수 있습니다. 이메일 템플릿은 Dashboard에서 사용자 정의 가능하며, 기본 링크 만료 시간은 1시간입니다.
* MFA (TOTP): TOTP(Time-based One-Time Password)를 사용한 다단계 인증은 3단계로 이루어집니다. 첫 번째로 supabase.auth.mfa.enroll을 통해 MFA를 등록하고 QR 코드와 Secret을 얻습니다. 두 번째로 supabase.auth.mfa.challenge로 챌린지를 생성하고, 마지막으로 6자리 코드를 입력하여 supabase.auth.mfa.verify로 인증을 완료합니다.
* RLS (Row Level Security) 통합: RLS는 Supabase Auth와 PostgreSQL을 직접 통합하여 백엔드 인가 코드를 최소화합니다. auth.uid()는 현재 인증된 사용자의 ID를 반환하여 특정 사용자의 데이터에 대한 접근을 제어하는 정책(users see own tasks)을 생성하는 데 사용됩니다. auth.jwt()는 사용자 메타데이터에 포함된 커스텀 클레임(예: 'premium' 플랜 여부)에 접근하여 premium only와 같은 정책을 설정할 수 있습니다. supabase.auth.updateUser를 통해 사용자 메타데이터를 업데이트할 수 있습니다.
* 세션 관리: supabase.auth.currentSession으로 현재 세션을 가져올 수 있으며, 세션이 만료되면 SDK가 자동으로 supabase.auth.refreshSession()을 처리합니다. supabase.auth.signOut()으로 로그아웃합니다.

시사점

Supabase Auth는 PostgreSQL과의 긴밀한 통합을 통해 RLS를 활용하여 백엔드 인가 로직을 대폭 줄일 수 있으며, OAuth, Magic Link, MFA 등의 고급 인증 기능을 제공하여 프로덕션 애플리케이션의 보안 및 사용자 경험을 향상시킬 수 있습니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions