Actions
이슈 #443
진행중
HP
HP
Phase 0.7 Wallet-as-Identity MVP — WalletChallenge/Verify + Reference Clients (sdktest wallet-login + Web Console 4섹션)
이슈 #443:
Phase 0.7 Wallet-as-Identity MVP — WalletChallenge/Verify + Reference Clients (sdktest wallet-login + Web Console 4섹션)
시작일:
2026/05/13
완료일:
진척도:
0%
추정시간:
설명
배경¶
로드맵(#440) 의 Phase 0.7 Wallet-as-Identity 를 MVP 형태로 구현한다. AI Agent / 자동화 / CI / headless entity 가 GoTrue 없이 secp256k1 지갑만으로 서버와 상호작용 가능하게 하고, 사람 흐름 (GoTrue) ↔ headless 흐름 (wallet) 을 같은 reference client 에서 비교 검증 할 수 있게 한다.
작업 순서 (완결 시점 순서)¶
-
Web Console Test Client — Section A (User/GoTrue) 먼저 교체
-
webconsole_test_client.go의 JS UI 에서 기존 MetaMask +AuthService.Challenge/Verify흐름 제거 - GoTrue URL / email / password 입력 + signup / login / refresh 버튼
- 현재 서버 RPC 만으로 구현 가능 (서버 수정 없음)
-
-
서버 RPC 구현 — Phase 0.7 의 핵심
-
AuthService.WalletChallenge/WalletVerify추가 (proto, handler, store/redis nonce) - Challenge payload 해석 명세 구현: JSON
{domain, purpose, wallet, nonce, issued_at, expires_at} - wallet JWT 발급 —
typ:"wallet",sub:<wallet_address>, 1h TTL,golang-jwt/jwt/v4 -
internal/server/interceptors.go::AuthInterceptor가wallettyp 수용 +AuthContext.PrincipalType/PrincipalID채움 (Phase 0.5 의 Principal 모델 적용) -
RegisterNode확장 — user token 이면owner_user_id = sub, wallet token 이면owner_wallet_address = sub(owner_user_id = NULL). 자율 노드 생성 -
VerifySignature보안 강화 (선행 필수): nonce 저장 (DB 또는 redis) + TTL (5분) + one-time use + domain/purpose 검증 + 서명에서 public key recover 후 address 비교
-
-
Web Console Test Client — Section B (Wallet Identity, MVP)
- local private key sign 먼저 (MetaMask 후속). 브라우저/extension 상태 무관, 프로토콜 안정화 우선
- private key 입력 / wallet address 표시 / WalletChallenge → sign → WalletVerify → wallet token 표시
-
sdktest 신규 명령 —
cmd/sdktest-
wallet-login --key <hex>(or--state에 저장된 keypair 사용) - 같은 서버 RPC 사용. State 에
wallet_token저장
-
-
Web Console Test Client — Section C (Node Register)
- auth mode toggle: user token | wallet token
- 별도 node keypair 입력 / node_id
- NodeChallenge → sign → RegisterNode — 선택한 auth mode 로 bearer 전송
-
RegisterNode 확장 검증 — user JWT 일 때
owner_user_id채움, wallet JWT 일 때owner_wallet_address채움 확인
-
(Optional) Section B 에 MetaMask
personal_sign을 signing method 옵션으로 추가
Section D (Smoke Calls) 신규 항목¶
- Health / SystemInfo
- GetNode / ListNodes
- ConnectNode bidi — 노드 토큰으로 stream open 테스트
- VFS smoke (Phase 1 후 dFS 로 교체)
DoD¶
-
AuthService.WalletChallenge+WalletVerify동작 (machine-readable payload + nonce/TTL/one-time/domain/recover) -
wallet token 을 수용하는
AuthInterceptor에서PrincipalType="wallet",PrincipalID=<address>채움 -
RegisterNode가 wallet token bearer 수용 (owner_user_id=NULL,owner_wallet_address=sub) -
cmd/sdktest wallet-login동작 검증 -
webconsole_test_client.goSection A/B/C/D 4개 섹션 모두 동작 — 한 화면에서 GoTrue 흐름·Wallet 흐름 비교 가능 -
wallet token 의 기본 scope 가
wallet://<자기주소>/로 제한됨 (다른 namespace 접근 거부) -
user_wallets테이블 시서마 (Phase 0.5 공통 모듈과 함께) 도입 -
VerifySignature보안 강화 완료 -
wallet_delegations테이블 자리만 잡힌 (실 구현은 후속 마일스톤)
관련 이슈¶
Actions