비밀번호 대신 지갑 서명을 사용하는 이유
- 새로운 비밀번호 불필요 – 사용자가 이미 보유한 키로 인증이 이루어집니다.
- 탈취하거나 재사용할 것이 없음 – 각 로그인은 사용자 디바이스를 벗어나지 않는 일회성 도메인 바인딩 서명입니다.
- 지갑 무관 – 모든 EIP-1193 지갑(브라우저 확장, 모바일 딥링크, 임베디드 프로바이더)에서 동작하며 개방형 “Sign in with Ethereum” (SIWE) EIP-4361 표준을 따릅니다.
전체 흐름
미배포 스마트 지갑?Base Account 서명에는 ERC-6492 래퍼가 포함되어 있어 지갑 컨트랙트가 배포되기 전에도 검증이 가능합니다. Viem의
verifyMessage와 verifyTypedData가 이를 자동으로 처리합니다.구현
의존성 설치
의존성을 설치합니다:코드 스니펫
위 코드를 Base Account 외에도 사용하는 경우, 모든 지갑이 새로운
wallet_connect
메서드를 아직 지원하지 않는다는 점에 유의하세요.
호출이 [method_not_supported]를 발생시키면 eth_requestAccounts와 personal_sign을 사용하도록 폴백하세요.팝업
차단을 피하려면
사용자가 “Base로 로그인” 버튼을 누르기 전에 (예: 페이지 로드 시) 논스를 가져오거나 생성하세요.
보안을 위해, 백엔드가 모든 논스를 추적하고 재사용된 논스를 거부하기만 하면 됩니다. 논스의 출처는 관계없습니다.
Express 서버 예시
server/auth.ts
Base Sign In With Base 버튼 추가
네이티브 룩앤필을 위해 사전 제작된 컴포넌트를 사용하세요:App.tsx
SignInWithBaseButton 컴포넌트 타입과 이 페이지의 예시를 참고하세요.