End-User 인증
기본적으로 Fascia 관리자만 Portal에 접근할 수 있습니다. End-User 인증을 설정하면 실제 사용자 — 고객, 직원 등 — 에게 Portal을 열어줄 수 있습니다. 각 사용자는 역할 기반 접근 제어가 적용된 자신만의 계정을 갖게 됩니다.
End-User 인증은 Fascia의 기본 기능으로 내장되어 있습니다. Chat Studio에서 AuthSpec을 구성하면, Fascia가 나머지를 처리합니다: 사용자 등록, 로그인, 토큰 관리, 역할 기반 필터링.
End-User 인증은 전적으로 GCP 프로젝트(Executor)에서 실행됩니다. 사용자 인증 정보와 토큰은 절대 Fascia 서버를 통과하지 않습니다.
작동 방식
Fascia는 이중 인증 모델을 사용합니다:
| 모드 | 대상 | 로그인 URL | 접근 범위 |
|---|---|---|---|
| 관리자 (Fascia) | 워크스페이스 소유자 및 관리자 | portal.fascia.run/login | 전체 접근: Dashboard, 모든 Entity, 모든 Tool |
| End-User (Executor) | 애플리케이션의 사용자 | portal.fascia.run/w/:workspaceId/login | 역할별 필터링: 역할에 허용된 Tool만 |
관리자 인증은 Fascia 플랫폼이 처리합니다. End-User 인증은 GCP 프로젝트의 Executor가 AuthSpec 구성에 따라 처리합니다.
AuthSpec 설정
Chat Studio에서 필요한 인증을 설명하면 AuthSpec이 생성됩니다:
로그인 방식
하나를 선택하거나 여러 개를 조합할 수 있습니다:
- 자체 로그인 — 이메일과 패스워드로 회원가입. 사용자가 이메일, 표시 이름, 패스워드로 계정을 직접 만듭니다. 패스워드는 bcrypt로 해싱됩니다.
- 소셜 로그인 — OAuth 2.0 제공자 (Google, Apple, Kakao, Naver, GitHub 등). 기존 계정으로 인증합니다.
- 하이브리드 — 자체 로그인과 소셜 로그인을 동시에 사용. 어느 방식으로든 가입 가능하며, 같은 이메일 사용 시 계정이 자동 연결됩니다.
역할
애플리케이션에 필요한 역할을 정의합니다. 일반적인 예시:
| 역할 | 일반적인 접근 범위 |
|---|---|
admin | 모든 Tool과 데이터 관리 |
staff | 운영 Tool, 제한된 데이터 접근 |
customer | 자신의 데이터만, 고객용 Tool |
shop_owner | 매장 관리 Tool |
각 역할은 Portal에서 해당 사용자에게 어떤 Tool이 표시되는지를 제어합니다.
관리자 역할
모든 Tool을 볼 수 있는 역할을 지정합니다 (내부/관리용 Tool 포함). 관리자 역할이 아닌 사용자는 자신의 역할에 명시적으로 허용된 Tool만 볼 수 있습니다.
Auth와 함께 배포
Chat Studio에서 AuthSpec을 구성한 후:
- 검토 — AuthSpec이 Entity, Tool 스펙과 함께 표시됩니다
- 배포 — 평소대로 배포합니다. Fascia가 GCP Cloud SQL 데이터베이스에 인증 테이블(사용자, 토큰, 제공자)을 프로비저닝하고 Executor의 인증 엔드포인트를 구성합니다
- 로그인 URL 공유 — 최종 사용자에게 워크스페이스별 URL을 전달합니다:
https://portal.fascia.run/w/<워크스페이스-ID>/login
워크스페이스 ID는 Chat Studio의 워크스페이스 설정에서 확인할 수 있습니다.
사용자 등록 및 로그인
회원가입
최종 사용자는 로그인 URL을 방문하여 회원가입 탭으로 전환합니다:
- 이메일 주소 입력
- 표시 이름 선택 (선택사항)
- 패스워드 설정 및 확인
- 회원가입 클릭
시스템이 확인하는 사항:
- 이메일 고유성 (중복 계정 없음)
- 패스워드 강도 요구사항
- AuthSpec에서 회원가입이 활성화되어 있는지
새 사용자는 AuthSpec에서 정의한 기본 역할이 배정됩니다.
로그인
기존 사용자는 로그인 탭에서 이메일과 패스워드를 입력합니다. 성공하면 접근 토큰(1시간)과 리프레시 토큰(7일)을 받습니다. Portal이 토큰 갱신을 자동으로 처리합니다.
에러 처리
일반적인 문제에 대해 명확한 에러 메시지가 표시됩니다:
- 잘못된 인증 정보
- 관리자에 의한 계정 정지
- 회원가입 비활성화
- 약한 패스워드
역할 기반 접근
로그인 후, 최종 사용자는 자신의 역할에 따라 필터링된 Portal을 봅니다:
End User가 보는 것
- Tools 페이지 — 역할에 허용된 Tool만
- Tool 실행 폼 — 관리자와 동일한 인터페이스, 동적 입력 필드와 결과 표시
- 사이드바 — 이메일과 "End User" 표시
End User가 보지 못하는 것
- Dashboard (Entity 카운트와 활동)
- Entity 목록과 CRUD 작업
- 상태 전이와 Entity-Action 버튼
- 관리자 전용 Tool
예시
렌탈카 시스템에서 다음과 같은 역할 구성을 상상해 보세요:
| 사용자 | 역할 | 보 이는 것 |
|---|---|---|
| 지점장 | admin | Dashboard + 모든 Entity + 모든 Tool |
| 프런트 데스크 | staff | 체크인 Tool, 반납 Tool, 가용성 Tool |
| 고객 | customer | 예약 Tool, 내 예약 Tool |
같은 Portal 앱, 같은 배포 — 하지만 각 사용자가 정확히 필요한 인터페이스를 갖게 됩니다.
사용자 관리
관리자로서 Management Console을 통해 최종 사용자를 관리할 수 있습니다:
- 모든 사용자 조회 — 이메일, 역할, 계정 상태
- 역할 변경 — 사용자의 접근 수준을 승급 또는 강등
- 계정 정지 — 사용자의 로그인을 일시적으로 차단
- 계정 재활성화 — 정지된 사용자를 복구
보안
End-User 인증은 Fascia의 보안 원칙을 따릅니다:
- 패스워드는 bcrypt로 해싱 (cost factor 12+)
- JWT 토큰은 GCP Secret Manager에 저장된 키로 서명
- 접근 토큰은 1시간 후 만료; 리프레시 토큰은 7일
- 로그인 실패는 속도 제한 (이메일당 분당 5회)
- 모든 인증 작업은 감사 추적에 기록
- 데이터는 GCP 프로젝트에 유지 — Fascia 서버가 사용자 인증 정보를 볼 수 없음
다음 단계
- Entity CRUD Portal — Portal의 전체 기능 알아보기
- 예약 시스템 만들기 — 역할과 인증 설정을 포함한 튜토리얼
- 아키텍처: BYOC — 인증이 인프라에서 어디에서 실행되는지 이해하기