← 목록
기타 2026-05-27 5KB 읽기 6분

3 서비스 통합 세션 SDK

개요

crowny.org / tiomta.com / talk.crowny.org에서 단일 CRN-ID + 통합 지갑 세션을 공유하는 메커니즘을 구축했다. 한 번 로그인하면 세 사이트 어디서나 같은 사용자로 동작한다.

무엇을 했는지

신규 파일

  1. /Users/ef/CrownyOS/apps/메신저/v3/crowny-session-sdk.js
- window.CrownySession 전역 API - localStorage(crowny_session_v1) + 쿠키(crowny_token) 이중 저장 - BroadcastChannel(crowny_session_bus) + postMessage 크로스탭/iframe 동기화 - CrownyAuth :9401 직접 로그인 + 메신저 /sso/login 경유 로그인 - bank.crowny.org :9400 + 메신저 HTTP :9766 경유 잔액 조회 - Firebase ↔ CrownyAuth 브릿지 (bridgeFirebase) - 허용 오리진 화이트리스트 12개

  1. /Users/ef/CrownyOS/apps/메신저/v3/통합지갑위젯.js
- window.CrownyWallet 전역 API - 화면 우상단 고정 배지: [CRN-12345678] [1,250 FONE ▼] - 클릭 시 미니 모달: FNC/CRN/CRM 잔액 + 송금 폼 - 30초 자동 갱신, balance_change 이벤트 구독 - 인라인 스타일 자동 주입 (외부 CSS 의존성 없음)

  1. /Users/ef/CrownyOS/apps/메신저/v3/통합세션.한선
- 한선씨 RPN 정본 - 함수 8개: 허용오리진목록, 세션저장JS생성, 세션조회JS생성, 세션삭제JS생성, 브로드캐스트JS생성, 통합지갑위젯HTML생성, 통합지갑위젯JS생성, Firebase브릿지JS생성, tiomta토큰주입JS생성, 임베드토큰수신JS생성, _자가검증 - 자가검증 8건

수정된 파일

  1. /Users/ef/CrownyOS/apps/메신저/v3/서버/ws-server-v3.js
- HTTP 서버(9766)에 /crowny-session-sdk.js, /통합지갑위젯.js 정적 라우트 추가 - SPA 서버(9752)에도 동일 라우트 추가 (메신저 자체 SPA 로드용) - Access-Control-Allow-Origin: * 설정 (타 도메인에서 로드 가능)

  1. /Users/ef/crowny-org/index.html (2469번 줄 이후 추가)
- <script src="http://localhost:9766/crowny-session-sdk.js"> 로드 - <script src="http://localhost:9766/통합지갑위젯.js"> 로드 - Firebase onAuthStateChangedCrownySession.bridgeFirebase() 자동 연결 - Firebase 로그아웃 → CrownySession.logout() 연동

  1. /Users/ef/crowny-tiomta/public/index.html (670번 줄 이전 추가)
- SDK + 위젯 로드 - tiomta_token / tiomta_crn_id localStorage 키 → CrownySession.setToken() 주입

  1. /Users/ef/CrownyOS/apps/메신저/v3/웹v3/index.html (4403번 줄 이후 추가)
- SDK + 위젯 로드 (/crowny-session-sdk.js SPA 경로) - ?embed=* 파라미터 감지 시 부모에게 세션 요청 (requestFromParent) - 1.5초 대기 후 세션 없으면 로그인 화면 표시

세션 흐름 요약

[로그인]
사용자 → crowny.org Firebase → CrownySession.bridgeFirebase()
                              → CrownyAuth :9401 signup/login
                              → localStorage + 쿠키 저장
                              → BroadcastChannel broadcast
                              → tiomta / 메신저 탭 자동 동기화

[지갑]
CrownySession.getBalance()
  1차: HTTP :9766/wallet/:id/balance
  2차: bank.crowny.org :9400/api/balance
  → CrownyWallet 위젯 자동 갱신 (30초)

관련 파일 경로

  • SDK: /Users/ef/CrownyOS/apps/메신저/v3/crowny-session-sdk.js
  • 위젯: /Users/ef/CrownyOS/apps/메신저/v3/통합지갑위젯.js
  • 정본: /Users/ef/CrownyOS/apps/메신저/v3/통합세션.한선
  • 서버: /Users/ef/CrownyOS/apps/메신저/v3/서버/ws-server-v3.js
  • crowny.org: /Users/ef/crowny-org/index.html
  • tiomta: /Users/ef/crowny-tiomta/public/index.html
  • 메신저: /Users/ef/CrownyOS/apps/메신저/v3/웹v3/index.html

잔여 이슈

  1. Firebase ↔ CrownyAuth 매핑 복잡도: Firebase UID는 CRN-XXXXXXXX 형식이 아님.
bridgeFirebase()에서 UID 앞 8자리 16진을 CRN으로 변환하지만, CrownyAuth가 /api/auth/signup을 지원하지 않으면 SSO-LOCAL 폴백으로만 동작. CrownyAuth에 Firebase bridge 전용 엔드포인트 추가 필요.

  1. tiomta_crn_id 키 미설정: tiomta server.js가 CrownyAuth 토큰 발급 시
localStorage.setItem('tiomta_crn_id', user.id) 를 클라이언트에 전달해야 완전 연동. 현재는 폴링/postMessage 방식으로 감지.

  1. 통합세션.한선 컴파일 검증: 터미널 접근 필요.
bash   cd /Users/ef/CrownyOS/crownyc
   ./hanseonc_high /Users/ef/CrownyOS/apps/메신저/v3/통합세션.한선 > /dev/null 2>&1 && echo OK
   

  1. CORS + 도메인 쿠키: 프로덕션에서 .crowny.org 쿠키가 tiomta.com에는 적용 안 됨.
tiomta는 별도 토큰 주입 방식으로 처리 (localStorage 기반).

  1. 라이브 검증:
bash   curl -s -o /dev/null -w "%{http_code}\n" http://localhost:9766/crowny-session-sdk.js
   curl -s -o /dev/null -w "%{http_code}\n" http://localhost:9752/crowny-session-sdk.js