Files
MyDoc/Baron Safe PWA/WebView 하이브리드 앱 추진 수정안.md

22 KiB

Baron Safe PWA/WebView 하이브리드 앱 추진 수정안

작성일: 2026-06-30

1. 목적

본 문서는 기존 Baron Safe 기반 휴대폰 승인 로그인 제안안을 실제 앱 개발로 진행하기 위한 실행 수정안이다.

Baron SSO의 기존 userfront는 그대로 유지하고, 그 안에서 활용 가능한 화면 자산, UX 흐름, Flutter 구현 패턴을 Baron Safe 앱 개발 시 가져다 쓰는 방향으로 구상한다. Baron Safe 앱 자체는 PWA 또는 WebView/하이브리드 기반 모바일 앱으로 우선 검토한다.

이번 수정안의 핵심은 Baron Safe의 기본 흐름을 전화번호 입력 시 선승인 후확인 후차단 방식으로 정의하는 것이다. 즉 사용자가 Baron SSO에서 휴대전화번호를 입력하면 일단 기존 로그인 흐름을 진행하고, Baron Safe 앱에서는 해당 로그인 이력을 즉시 확인할 수 있게 하며, 사용자가 본인 요청이 아니라고 판단하면 앱에서 차단하거나 세션을 해제하는 구조를 기본안으로 둔다.

2. 추진 배경

현재 적용 중인 휴대전화번호 기반 로그인은 사용자 편의성이 높다. 다만 전화번호만으로는 사용자가 실제 번호 소유자인지, 해당 로그인 요청이 본인 의사에 의한 것인지 확인하기 어렵다.

이를 보완하기 위해 사용자의 휴대폰에 Baron Safe 앱을 설치하고, 해당 앱을 사용자 계정에 연결된 확인 장치로 사용한다. 사용자는 PC, 브라우저, 키오스크 또는 RP 서비스에서 Baron SSO 로그인을 진행하고, 휴대폰 Baron Safe 앱에서 최근 로그인 이력, 연결 앱 현황, 접속 기기, 접속 시간, IP 정보를 확인한다. 본인이 요청한 로그인이 아니거나 의심스러운 경우에는 앱에서 해당 세션 또는 RP 연결을 차단한다.

이 방식은 엄격한 사전 승인형 인증보다는 사용성 중심의 사후 확인 및 차단 모델에 가깝다. Baron SSO의 현재 userfront에 이미 구현된 나의 App 현황, 접속이력, 현재 세션, 해지됨 화면과도 잘 맞는다.

3. 기본 방향

Baron Safe는 Flutter 기반 설치형 모바일 앱, PWA, WebView/하이브리드 앱 중 하나로 구현할 수 있다.

현재 Baron SSO userfront는 이미 모바일 화면을 고려한 포털 UI, 연결 앱 현황, 접속 이력, QR 진입 흐름 등을 포함하고 있다. 따라서 기존 userfront를 직접 변경하거나 앱으로 전환하기보다는, Baron Safe 앱에서 필요한 화면 흐름과 구현 패턴을 가져와 활용하고, 푸시/생체 인증/보안 저장소 같은 기능은 Baron Safe 앱의 네이티브 또는 Flutter 플러그인 계층으로 보강하는 하이브리드 구조가 적절하다.

기본 방향은 다음과 같다.

  • Android와 iOS를 모두 지원한다.
  • 기존 Baron userfront는 그대로 두고, Baron Safe 앱 개발 시 활용 가능한 Flutter 기술 스택과 UI/상태관리 패턴을 재사용한다.
  • 전화번호는 인증 수단이 아니라 사용자 식별자로 사용한다.
  • 기본 흐름은 선승인 후확인 후차단으로 둔다.
  • 사용자는 Baron Safe 앱에서 최근 로그인, 연결 앱, 활성 세션을 확인하고 필요 시 차단한다.
  • 푸시 알림은 로그인 발생 사실 또는 위험 이벤트를 사용자에게 알려주는 채널로 사용한다.
  • 향후 고위험 RP 또는 관리자 로그인에는 요청 시 승인/차단 방식을 선택 적용할 수 있다.
  • 확인, 차단, 해제, 만료, 실패는 모두 감사 로그로 남긴다.

4. 대상 앱 정의

앱 명칭은 가칭 Baron Safe로 한다.

주요 역할:

  • 사용자 휴대폰을 Baron SSO 계정 확인 장치로 등록
  • 최근 로그인 및 현재 세션 확인
  • 연결된 RP 앱 현황 확인
  • 의심 세션 차단 또는 로그아웃
  • RP 연결 해제 또는 차단
  • 로그인 발생, 신규 기기 접속, 고위험 이벤트 푸시 수신
  • 향후 고위험 로그인에 대한 사전 승인/차단
  • 기기 분실, 교체, 해제 대응

Baron Safe 앱은 브라우저에서 열리는 단순 웹페이지가 아니라 휴대폰에서 앱처럼 사용하는 모바일 앱이다. 다만 초기 구현은 기존 userfront의 화면 자산을 활용하는 PWA 또는 WebView/하이브리드 방식으로 검토한다.

5. 지원 플랫폼 및 배포

구분 Android iOS
앱 형식 APK 또는 AAB IPA
배포 방식 Google Play, 사내 배포, MDM, APK 배포 검토 TestFlight, App Store, Apple Business Manager, MDM 검토
푸시 Firebase Cloud Messaging APNs, Firebase 연동 가능
보안 저장소 Android Keystore iOS Keychain, Secure Enclave 검토
사용자 확인 지문, 얼굴, 기기 PIN Face ID, Touch ID, 기기 암호

초기 PoC 단계에서는 Android 우선 검증이 현실적이다. 단, 설계와 코드 구조는 iOS 확장을 전제로 둔다.

6. 기술 스택

6.1 기존 userfront 기반

현재 userfront에서 확인된 주요 기술은 다음과 같다.

영역 현재 기술
Framework Flutter
Language Dart
상태 관리 flutter_riverpod
Routing go_router
HTTP 통신 http
다국어 easy_localization
로컬 설정 shared_preferences
QR/스캔 관련 qr_flutter, mobile_scanner
이미지/SVG flutter_svg
로깅 logging, logger

Baron Safe 앱은 이 구성을 참고하여 필요한 부분을 가져가되, userfront 원본은 그대로 유지한다. 모바일 앱에 필요한 푸시, 생체 인증, 보안 저장소 기능은 Baron Safe 앱 쪽에 별도로 추가한다.

6.2 추가 검토 기술

영역 권장 기술 용도
Push Notification firebase_messaging, APNs 연동 로그인 발생, 신규 기기 접속, 차단 필요 이벤트 알림
Secure Storage flutter_secure_storage 또는 플랫폼 Method Channel device id, refresh token, 민감 설정 저장
Private Key Storage Android Keystore, iOS Keychain/Secure Enclave 향후 승인 응답 서명용 private key 보호
Local Authentication local_auth 차단/해제/고위험 승인 전 지문, Face ID, 기기 PIN 확인
Crypto Signing JWS/JWK 또는 COSE 지원 라이브러리, 필요 시 네이티브 연동 향후 승인/차단 요청 위변조 방지
API Client 기존 http 유지 또는 dio 검토 앱-SSO API 통신
State Management flutter_riverpod 유지 세션, 연결 앱, 알림 상태 관리
Routing go_router 유지 홈, 세션 상세, 차단, 설정 화면 전환
Deep Link app_links 검토 푸시 알림에서 특정 세션/앱 상세로 진입
App Integrity Play Integrity API, DeviceCheck/App Attest 검토 위변조 앱과 위험 기기 탐지

6.3 PWA/WebView/하이브리드 방식 검토

기존 구상은 userfront의 활용 가능한 부분을 Baron Safe 앱에서 재사용하여 PWA 또는 WebView/하이브리드 방식으로 앱처럼 제공하는 방향으로 볼 수 있다. 이 방식은 현재 구현된 모바일 포털 화면과 흐름을 참고할 수 있으므로 초기 개발 속도와 화면 일관성 측면에서 장점이 있다.

방식 설명 장점 주의점
PWA 웹앱을 브라우저 또는 홈 화면 설치 형태로 사용하는 방식 배포가 쉽고 기존 userfront의 화면/패턴 활용성이 높음 iOS/Android별 푸시, 백그라운드 동작, 보안 저장소 제약 검토 필요
WebView 앱 Android/iOS 앱 안에 Baron Safe용 웹 화면을 띄우는 방식 앱 설치형 UX 제공, 기존 userfront의 화면 흐름 활용 가능 민감 기능은 WebView JS가 아니라 네이티브 브리지에서 처리해야 함
하이브리드 앱 주요 화면은 WebView, 푸시/생체인증/보안저장은 네이티브 또는 Flutter 플러그인으로 처리 개발 속도와 앱 기능을 절충 가능 웹-네이티브 메시지 경계와 인증 토큰 전달 방식 설계 필요
순수 Flutter 앱 Baron Safe 전용 화면과 기능을 Flutter로 별도 구현 보안 기능과 앱 UX 제어가 가장 명확함 기존 userfront 화면 재사용성이 낮고 초기 구현량 증가

현 시점의 현실적인 권장안은 하이브리드 방식이다.

  • userfront의 연결 앱 현황, 접속 이력, QR 화면, 기본 포털 UI 중 Baron Safe에 필요한 부분은 Baron Safe 앱 화면으로 활용한다.
  • 로그인 발생 알림은 FCM/APNs 기반 네이티브 푸시로 처리한다.
  • 차단, 연결 해제, 고위험 승인 전 사용자 확인은 Android/iOS 네이티브 또는 Flutter local_auth 계층에서 처리한다.
  • 민감 토큰 저장과 향후 기기 서명은 Android Keystore, iOS Keychain/Secure Enclave 계층에서 처리한다.
  • WebView 화면은 정보 표시와 사용자 인터랙션을 담당하되, 실제 민감 기능은 네이티브 계층에 위임한다.

7. 주요 기능 범위

7.1 1단계 PoC

목표는 전체 보안 완성보다 전화번호 로그인 후 Baron Safe에서 확인 및 차단 흐름을 검증하는 것이다.

기능:

  • 앱 설치 및 실행
  • 사용자 로그인 또는 등록 코드 입력
  • 기기 등록 요청
  • device id 발급
  • push token 등록
  • 최근 로그인/현재 세션 목록 조회
  • 연결 RP 앱 현황 조회
  • 세션 상세 표시
  • 의심 세션 차단 또는 로그아웃
  • RP 연결 해제 또는 차단
  • 로그인 발생 알림 Mock 또는 수동 refresh

7.2 2단계 보안형 MVP

기능:

  • 실제 FCM/APNs 푸시 연동
  • 신규 기기 로그인, 외부망 접속, 고위험 RP 접속 알림
  • 차단/해제 전 생체 인증 또는 앱 PIN 수행
  • 차단 요청 payload 서명
  • 서버에서 public key로 서명 검증
  • 세션 강제 종료, RP 연결 해제, refresh token 무효화
  • 차단/해제/확인/만료 감사 로그
  • 기기 해제 및 재등록

7.3 3단계 운영 확장

기능:

  • 다중 기기 등록
  • 기기 분실 신고 및 관리자 강제 해제
  • RP별 인증 강도 정책
  • 위험 기반 사전 승인
  • number matching 또는 request code
  • FIDO2/passkey 연계 검토
  • Play Integrity, App Attest 기반 앱 무결성 검토
  • 사내/협력사 배포 체계 정립

8. 사용자 흐름

8.1 최초 기기 등록

  1. 사용자가 기존 Baron SSO 방식으로 로그인한다.
  2. 사용자 설정 화면에서 Baron Safe 기기 등록을 선택한다.
  3. 서버가 등록용 QR 또는 등록 코드를 생성한다.
  4. 사용자가 Baron Safe 앱에서 QR 또는 코드를 입력한다.
  5. 앱이 기기 정보를 생성하고 push token을 발급받는다.
  6. 앱이 필요 시 기기 key pair를 생성한다.
  7. 앱은 device id, push token, platform, public key를 서버에 등록한다.
  8. 서버는 해당 기기를 사용자 계정에 연결한다.

8.2 기본 흐름: 전화번호 입력 후 선승인, 확인 후 차단

  1. 사용자가 Baron SSO 또는 RP 로그인 화면에서 휴대전화번호를 입력한다.
  2. Baron SSO가 전화번호를 정규화하고 등록 사용자를 조회한다.
  3. Baron SSO가 기존 정책에 따라 로그인을 진행한다.
  4. 로그인 성공 시 Hydra/Kratos 세션과 RP 세션이 생성된다.
  5. Baron SSO가 해당 로그인 이벤트를 감사 로그와 세션 목록에 기록한다.
  6. Baron SSO가 등록된 Baron Safe 앱으로 로그인 발생 알림을 보낸다.
  7. 사용자는 Baron Safe 앱에서 요청 서비스, 접속 기기, IP, 시간, 인증수단을 확인한다.
  8. 본인 요청이 맞으면 별도 조치 없이 유지한다.
  9. 본인 요청이 아니거나 의심스러우면 앱에서 차단, 세션 종료, RP 연결 해제를 선택한다.
  10. 앱은 차단/해제 요청 전 생체 인증 또는 앱 PIN을 요구한다.
  11. 서버는 차단 요청을 검증한 뒤 해당 세션을 종료하고 필요 시 RP refresh token을 무효화한다.
  12. 차단 결과와 후속 조치는 Baron Safe 앱과 감사 로그에 기록된다.

이 흐름은 사용자 편의성을 우선하면서, 현재 userfront에 구현된 앱 현황/접속 이력 화면을 Baron Safe 앱의 핵심 경험으로 활용할 수 있다.

8.3 대안 흐름 비교

Baron Safe 앱의 사용자 경험은 기본안 하나로만 고정하지 않고, 보안 수준과 RP 위험도에 따라 몇 가지 대안을 비교한 뒤 단계적으로 적용하는 것이 좋다.

방식 설명 장점 단점 적합한 용도
기본안 선승인 후확인 후차단 전화번호 입력 후 기존 로그인은 진행하고, Baron Safe에서 사용자가 최근 로그인과 세션을 확인한 뒤 의심 시 차단한다. UX가 가장 간단하고 현재 userfront 화면과 잘 맞음. 반복 로그인 피로가 적음. PoC가 빠름. 비정상 로그인이 잠시라도 성립될 수 있음. 사후 차단이므로 고위험 RP에는 보완 필요. 일반 업무 RP, 내부 포털, 저위험 반복 로그인
2안 로그인 요청 시 승인/차단 로그인 요청이 발생할 때마다 Baron Safe 앱으로 알림을 보내고, 사용자가 승인해야 로그인이 완료된다. 보안성이 높고 사용자 승인 근거가 명확함. 오인 로그인 방지에 강함. 매번 승인이 필요해 번거로움. 푸시 안정성과 앱 응답성이 중요함. 관리자 기능, 외부망 접속, 고위험 RP
3안 최초 1회 승인 후 기간 내 자동 허용 RP 또는 기기별로 최초 1회만 Baron Safe 승인을 받고, 이후 일정 기간은 자동 허용한다. 보안성과 편의성을 절충할 수 있음. 반복 업무에 적합함. 신뢰 기간, 기기 변경, 위험 조건 정책이 필요함. 일반 업무 RP, 동일 기기 반복 로그인
4안 위험 기반 선택 승인 평소와 같은 기기/위치/RP는 기본안으로 처리하고, 신규 기기/IP/고위험 RP일 때만 사전 승인을 요구한다. 사용자 피로를 줄이면서 위험 상황에는 강한 인증을 적용할 수 있음. 위험 판단 로직과 정책 관리가 필요함. 초기 구현 난도가 높음. 운영 단계의 장기 목표
5안 QR/코드 매칭 승인 로그인 화면에 숫자 코드 또는 QR을 표시하고, 앱에서 같은 코드인지 확인한 뒤 승인한다. 푸시 피로 공격과 오인 승인을 줄일 수 있음. 사용자가 요청 기기를 더 명확히 확인함. 사용자가 코드를 비교해야 하므로 UX가 복잡해짐. 키오스크, 공용 PC, 관리자 로그인

8.4 권장 적용 순서

초기 PoC에서는 기본안을 우선 구현한다.

단계 적용 방식 설명
PoC 기본안 중심 전화번호 로그인 후 Baron Safe에서 최근 로그인/세션/RP 연결을 확인하고 차단하는 흐름 검증
MVP 기본안 + 2안 일부 일반 RP는 선승인 후확인 후차단, 고위험 RP 또는 신규 기기는 요청 시 승인/차단 적용
운영 3안 + 4안 + 5안 확장 신뢰 기간, 위험 기반 정책, QR/코드 매칭으로 보안 수준 세분화

이 구조를 사용하면 팀장 구상인 PWA/WebView 기반 화면 재사용과 현재 개발된 userfront 화면을 자연스럽게 활용하면서, Baron Safe의 보안 수준을 단계적으로 높일 수 있다.

9. 주요 화면 초안

화면 설명
온보딩 화면 Baron Safe 앱 소개 및 시작
기기 등록 화면 QR 스캔 또는 등록 코드 입력
등록 완료 화면 등록된 사용자/기기명 표시
홈 화면 최근 로그인, 현재 세션, 연결 앱 요약
접속 이력 화면 로그인 시간, IP, 기기, 브라우저, 인증수단 표시
세션 상세 화면 세션 ID, RP, 접속 환경, 상태, 차단 버튼 표시
연결 앱 현황 화면 연동 RP 목록, 최근 인증, 연결 해제/차단
차단 확인 화면 생체 인증 또는 앱 PIN 후 차단 실행
차단 완료 화면 세션 종료 또는 RP 연결 해제 결과 표시
고위험 승인 화면 향후 요청 시 승인/차단 방식 적용 시 사용
보안 설정 화면 앱 PIN, 생체 인증 사용 여부, 등록 기기 관리

10. Backend/API 필요 항목

10.1 기기 등록 API

POST /api/v1/baron-safe/devices/register

요청 항목:

  • registration_code 또는 registration_token
  • platform
  • device_name
  • push_token
  • public_key
  • app_version

응답 항목:

  • device_id
  • registered_at
  • user_display_name

10.2 로그인/세션 이력 조회 API

GET /api/v1/baron-safe/sessions

응답 항목:

  • session_id
  • client_id
  • client_name
  • authenticated_at
  • request_ip_address
  • user_agent
  • auth_method
  • status
  • is_current

10.3 연결 앱 조회 API

GET /api/v1/baron-safe/linked-apps

응답 항목:

  • client_id
  • client_name
  • linked_at
  • last_authenticated_at
  • status

10.4 세션 차단/종료 API

POST /api/v1/baron-safe/sessions/{sessionId}/block

요청 항목:

  • device_id
  • reason
  • user_presence
  • user_verification
  • decided_at
  • signature

응답 항목:

  • status
  • terminated_session_id
  • revoked_tokens

10.5 RP 연결 해제/차단 API

POST /api/v1/baron-safe/linked-apps/{clientId}/block

요청 항목:

  • device_id
  • reason
  • user_presence
  • user_verification
  • decided_at
  • signature

응답 항목:

  • status
  • client_id
  • blocked_at

10.6 고위험 로그인 승인 API

향후 2안 또는 4안을 적용할 경우 다음 API를 추가한다.

POST /api/v1/auth/baron-safe/login/init
GET /api/v1/auth/baron-safe/requests/{authReqId}
POST /api/v1/auth/baron-safe/requests/{authReqId}/decision
POST /api/v1/auth/baron-safe/login/poll

11. 보안 고려사항

필수 사항:

  • 앱이 휴대폰 번호를 자동으로 가져오는 방식에 의존하지 않는다.
  • 전화번호는 사용자 식별자이며 인증 수단이 아니다.
  • 기본안은 사후 확인/차단 모델이므로 고위험 RP에는 추가 보완책을 둔다.
  • 차단/해제 같은 민감 조작 전에는 생체 인증 또는 앱 PIN을 수행한다.
  • private key는 서버로 전송하지 않는다.
  • 차단/승인 응답은 기기 private key로 서명하는 방향을 검토한다.
  • 푸시 메시지에는 민감정보를 최소화한다.
  • 접속 이력과 세션 상세는 등록된 기기 또는 인증된 사용자만 조회할 수 있어야 한다.
  • 전화번호 미등록 여부와 기기 미등록 여부가 외부에 노출되지 않도록 응답 메시지를 일반화한다.
  • 반복 로그인 요청 또는 반복 차단 요청에는 rate limit을 적용한다.
  • 모든 로그인, 확인, 차단, 해제, 실패 이벤트를 감사 로그로 남긴다.
  • 차단 시 Hydra/Kratos 세션, RP 세션, refresh token 무효화 범위를 명확히 정의한다.

12. 권장 추진안

초기에는 기존 userfront는 그대로 두고, 그 안에서 활용 가능한 화면 자산과 구현 패턴을 Baron Safe 앱에서 가져다 쓰는 WebView/하이브리드 방식을 우선 검토한다. 보안 기능은 네이티브 또는 Flutter 플러그인 계층으로 분리하는 것을 권장한다.

이유는 다음과 같다.

  • 현재 userfront는 이미 모바일 포털 화면과 연결 앱 현황, 접속 이력, QR 진입 등 Baron Safe와 가까운 화면 흐름을 일부 포함하고 있다.
  • 기본안인 선승인 후확인 후차단은 현재 화면 구조와 가장 잘 맞는다.
  • 초기 PoC에서는 화면을 전부 새로 만들기보다 기존 userfront의 활용 가능한 부분을 가져오는 편이 빠르다.
  • 다만 푸시, 생체 인증, private key, 보안 저장소, 앱 무결성은 WebView 내부 웹 코드에만 맡기기 어렵다.
  • 따라서 userfront는 유지하고, Baron Safe 앱은 활용 가능한 화면/패턴을 가져오며, 인증 장치 기능은 네이티브/Flutter 앱 계층이 담당하도록 역할을 나누는 것이 적절하다.

추진 순서:

  1. 기존 userfront 화면 중 Baron Safe 앱에서 활용 가능한 화면, 패턴, API 흐름을 식별한다.
  2. PWA 방식과 WebView 앱 방식 중 PoC에 적합한 방식을 결정한다.
  3. Backend에 세션 이력 조회, 연결 앱 조회, 세션 차단, RP 연결 차단 API를 추가한다.
  4. Mock push 또는 수동 refresh 방식으로 기본안 PoC를 완성한다.
  5. Android FCM과 iOS APNs 기반 로그인 발생 알림을 연동한다.
  6. 차단/해제 전 생체 인증과 기기 보안 저장소를 네이티브/Flutter 플러그인 계층으로 연동한다.
  7. 고위험 RP에 한해 요청 시 승인/차단 API를 추가한다.
  8. 운영 배포 방식과 장기적으로 완전 별도 baron_safe_app으로 갈지 여부를 확정한다.

13. 결론

Baron Safe 앱의 기본 흐름은 사용자가 Baron SSO에서 전화번호 입력 → 로그인 선승인 → Baron Safe에서 확인 → 의심 시 차단으로 잡는 것이 현재 개발된 userfront 화면과 가장 잘 맞는다.

이 방식은 사용자 편의성과 PoC 속도 측면에서 장점이 크다. 다만 사후 차단 모델이므로 관리자 기능, 외부망 접속, 고위험 RP에는 요청 시 승인/차단, 위험 기반 승인, QR/코드 매칭 같은 대안을 단계적으로 적용하는 것이 바람직하다.

14. 용어 주석

PoC

PoC는 Proof of Concept의 약자이며, 한국어로는 개념 검증 또는 가능성 검증 정도로 볼 수 있다.

본 문서에서 PoC는 Baron Safe 앱의 전체 보안 기능과 운영 기능을 모두 완성하기 전에, 핵심 흐름이 실제로 가능한지 먼저 확인하는 단계를 의미한다.

JWS/JWK

JWS는 JSON Web Signature의 약자이며, JSON 형태의 데이터가 중간에 위조되거나 변경되지 않았음을 서명으로 증명하는 표준이다.

JWK는 JSON Web Key의 약자이며, 공개키 또는 비밀키 정보를 JSON 형식으로 표현하는 표준이다.

COSE 기반

COSE는 CBOR Object Signing and Encryption의 약자이며, 데이터를 서명하거나 암호화하기 위한 표준 형식이다.

JWS/JWK가 JSON 기반이라면, COSE는 CBOR라는 더 작고 기계 처리에 적합한 데이터 형식을 기반으로 한다. WebAuthn, FIDO2, 패스키 같은 인증 기술에서 자주 사용된다.

앱 private key

앱 private key는 Baron Safe 앱이 설치된 특정 휴대폰 안에서 생성되고 보관되는 비밀키를 의미한다.

이 키는 서버로 전송하지 않으며, Android Keystore 또는 iOS Keychain/Secure Enclave 같은 기기 보안 저장소에 보관하는 것이 원칙이다.