From 624156361aa761fc6478ca9a42be19d750abeb81 Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Sat, 27 Jun 2026 23:23:51 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20WBS-CRM-08=20=EC=86=8C=EC=85=9C=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=C2=B7=EA=B3=A0=EA=B0=9D=20=ED=9A=8C?= =?UTF-8?q?=EC=9B=90=EA=B0=80=EC=9E=85=20=ED=95=AD=EB=AA=A9=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 네이버·카카오·구글 OAuth 2.0 + 기본 이메일 계정 지원 - 가입 입력 최소화 (이름·연락처 2필드) - portal_users 테이블 설계, 관리자 인증과 분리 원칙 - 필요 환경 변수·패키지·마이그레이션 목록 명시 - WBS-CRM-07(고객 포털) 선행 조건으로 등록 Co-Authored-By: Claude Sonnet 4.6 --- ROADMAP_WBS.md | 59 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/ROADMAP_WBS.md b/ROADMAP_WBS.md index 22daeec..497bb58 100644 --- a/ROADMAP_WBS.md +++ b/ROADMAP_WBS.md @@ -342,15 +342,70 @@ Todo: 목표: 기장 고객이 본인 신고 현황과 중요 알림을 직접 확인한다. 성공 기준: -- 고객 전용 URL + 인증(단순 PIN 또는 링크 토큰) +- 고객 전용 URL + 인증(소셜 로그인 또는 링크 토큰) - 본인 신고 일정, 상담 요약(세무사 허용 항목만) 조회 - 개인정보 열람 범위는 세무사가 허용한 항목만 Todo: -- [ ] 고객 포털 설계 (인증 방식 결정) +- [ ] 고객 포털 설계 (인증 방식 결정 — WBS-CRM-08 선행) - [ ] 고객 전용 Razor Pages 추가 - [ ] 세무사 허용 권한 설정 UI +## WBS-CRM-08 고객 회원가입 · 소셜 로그인 — Phase 3 + +목표: 고객 포털 접근을 위한 회원가입과 소셜 로그인을 제공한다. +가입 마찰을 최소화해 상담 접수 → 고객 포털 전환율을 높인다. + +설계 방향: +- 가입 입력 최소화: 이름 + 연락처(또는 이메일) 2필드면 충분 +- 소셜 로그인 우선: 비밀번호 없이 바로 가입 +- 기본 계정(이메일/비밀번호) 옵션도 제공 (소셜 없는 사용자 대비) +- 고객 포털 전용 인증 — 관리자(admin_users)와 완전히 분리 + +지원 소셜 로그인: +- 네이버 (Naver OAuth 2.0) — 국내 주요 채널 +- 카카오 (Kakao Login) — 기존 카카오 채널 연계 +- 구글 (Google OAuth 2.0) — 해외·젊은 고객층 + +성공 기준: +- 소셜 로그인 3종 모두 동작 (네이버·카카오·구글) +- 이메일/비밀번호 기본 계정 가입 + 로그인 동작 +- 가입 폼: 이름·연락처 2필드만 요구 (소셜 프로필에서 자동 채우기) +- 로그인 후 고객 포털 (`/taxbaik/portal`) 접근 +- 고객 계정이 백오피스 clients 테이블 레코드와 연결 +- 회원 계정 미인증 상태에서 포털 접근 시 로그인 페이지 리다이렉트 + +DB 스키마: +- `portal_users` 테이블 (V011 마이그레이션) + - id, client_id(FK, nullable), email, name, phone, provider(naver/kakao/google/local), provider_id, password_hash(nullable), created_at +- 소셜 로그인 provider_id는 각 플랫폼 식별자 + +기술 결정: +- ASP.NET Core OAuth Middleware (Microsoft.AspNetCore.Authentication.OAuth) +- 네이버: 커스텀 OAuth handler (공식 패키지 없음, 직접 구현) +- 카카오: AspNet.Security.OAuth.Kakao 패키지 +- 구글: Microsoft.AspNetCore.Authentication.Google 패키지 +- 고객 포털 세션: HttpOnly Cookie 기반 (JWT localStorage와 분리) + +환경 변수 필요 (Gitea Secrets 추가): +- `NAVER_CLIENT_ID` / `NAVER_CLIENT_SECRET` +- `KAKAO_CLIENT_ID` / `KAKAO_CLIENT_SECRET` +- `GOOGLE_CLIENT_ID` / `GOOGLE_CLIENT_SECRET` + +Todo: +- [ ] WBS-CRM-07 고객 포털 기본 구조 완성 (선행) +- [ ] OAuth 앱 등록 (네이버·카카오·구글 개발자 콘솔) +- [ ] V011__CreatePortalUsers.sql 마이그레이션 +- [ ] PortalUser 엔티티 / IPortalUserRepository / PortalUserRepository +- [ ] 네이버 OAuth Handler 구현 +- [ ] 카카오·구글 패키지 추가 및 설정 +- [ ] 기본 계정 회원가입 폼 (`/taxbaik/portal/register`) +- [ ] 소셜 로그인 콜백 처리 → portal_users 자동 생성 +- [ ] 신규 가입 시 clients 테이블 연결 또는 신규 생성 +- [ ] 포털 로그인 페이지 (`/taxbaik/portal/login`) — 소셜 버튼 + 이메일 폼 +- [ ] Gitea Secrets에 OAuth 키 추가 +- [ ] 배포 후 소셜 로그인 3종 E2E 테스트 + --- ## ── 유지보수성 ─────────────────────────────────