SSO 미들웨어 실제 서비스 배포 (Node.js 9개 + TOAU 라이브러리)
2026-04-16  ·  2026-04-16-sso-middleware-deployment.md

SSO 미들웨어 실제 서비스 배포 (Node.js 9개 + TOAU 라이브러리)

개요

2026-04-15 통합 인프라 완성 이후, 각 서비스에 SSO 미들웨어를 실제로 삽입하고 LaunchAgent 재기동으로 라이브 배포. auth.crowny.org 를 LaunchAgent로 영구 구동 전환.

무엇을 했는지

1. auth.crowny.org LaunchAgent 승격

  • `~/Library/LaunchAgents/org.crowny.auth.plist` 작성
  • KeepAlive + RunAtLoad → 재부팅/크래시 자동 복구
  • PID 93689 확인 (org.crowny.auth)

2. SSO 미들웨어에 raw-http 헬퍼 추가

  • `authenticate(req, serviceName)` 함수 — `(req,res,next)` 미들웨어가 아닌 http.createServer 패턴 지원
  • `unauthorized(res, msg)` 편의 함수
  • `module.exports.verify/authenticate/unauthorized` 내보내기 순서 교정

3. 10개 Node.js 서비스 일괄 패치

자동 패치 스크립트 `patch_sso_into_services.sh` 실행: | 서비스 | 포트 | LaunchAgent | 상태 | |--------|------|-------------|------| | patent | 9732 | org.crowny.patent | ✅ 재기동 완료 | | stock | 9731 | org.crowny.stock | ✅ | | artist | 9734 | org.crowny.artist | ✅ | | avl | 9737 | org.crowny.avl | ✅ | | avls | 9736 | org.crowny.avls | ✅ | | card | 9450 | — | ✅ | | mind | 7750 | — | ✅ | | trading | 7740 | — | ✅ | | int | 9500 | — | ✅ | | security | 9502 | 미등록 | ⚠️ | **church** (9310): ES module + 동기 핸들러 — 별도 패치 설계 필요 (스킵) **패치 내용** (각 server.js에 2줄 삽입):

const sso = require('/Users/ef/crowny-data/auth/sso-middleware.js');  // 상단
// createServer 핸들러 최상단:
req.ssoUser = await sso.authenticate(req, 'patent').catch(() => null);
**비침해적 설계**: `req.ssoUser` 만 주입. 기존 로직/인증 전혀 변경 없음. 토큰 있으면 자동 touch 발생.

4. TOAU 서비스용 한선씨 SSO 라이브러리

  • `/Users/ef/CrownyOS/crownyc/libs/SSO인증.한선` (신규)
  • 기능:
- `토큰추출(요청텍스트)` — Bearer 토큰 파싱 - `쿠키토큰추출(요청텍스트)` — crowny_token 쿠키 - `토큰검증(토큰, 호스트, 포트)` — auth 서버에 GET /api/verify 소켓 호출 - `서비스접속기록(사용자, 서비스, 호스트, 포트)` — POST /api/touch fire-and-forget - `요청인증(요청텍스트, 서비스명)` — 올인원 편의 함수
  • 컴파일: 345KB TOAU, 12,328 큐브 (EXIT=0)
  • 의존성: 문자열.한선, JSON.한선
대상 서비스 (향후 실제 통합):
  • crowny-dex (:9402) — crownyc 실행
  • crowny-chain (:9729) — crownyc
  • crowny-chat (:9403) — crownyc (크라우니메신저서버.한선)

검증


auth 회원:       176명 (prev 174 → +2 마이그레이션 재실행 여파)
총 서비스 링크:   16건
  main:    13명
  bank:     1명 (kps)
  stock:    1명 (kps)
  project:  1명 (ef)

패치 서비스 실제 구동 확인:
  • patent:9732 HTTP 200 (api/dashboard 정상 응답)
  • stock:9731 HTTP 200
  • artist:9734 HTTP 200
  • avl/avls/card/mind/trading/int HTTP 200

관련 파일 경로

인프라

  • `/Users/ef/Library/LaunchAgents/org.crowny.auth.plist` — 영구 구동
  • `/Users/ef/crowny-data/auth/auth-server.js` — 서버 (:9401)

SSO

  • `/Users/ef/crowny-data/auth/sso-middleware.js` — Node.js 미들웨어 + authenticate 헬퍼
  • `/Users/ef/crowny-data/auth/sso-middleware.한선` — 단순 동반본
  • `/Users/ef/CrownyOS/crownyc/libs/SSO인증.한선` — TOAU 서비스용 완전 구현 (소켓 기반)

자동화

  • `/Users/ef/crowny-data/auth/patch_sso_into_services.sh` — 일괄 삽입 스크립트 (idempotent)
  • `/Users/ef/crowny-data/auth/sync_users_profiles.py` — 정합 동기화
  • `/Users/ef/crowny-data/auth/migrate_patent.py`
  • `/Users/ef/crowny-data/auth/migrate_project.py`

백업

  • 각 server.js에 `.bak-` 로 원본 보존

잔여 이슈

✅ 완료: TOAU 3서비스 실제 통합 (2026-04-17)

  • chat (크라우니메신저서버.한선): 가져오기 "SSO인증.한선" + 요청인증 + API전송 인증유저 우선
  • chain (블록체인서버.한선): 가져오기 + 요청인증 fire-and-forget
  • dex (크라우니거래소서버.한선): 가져오기 + 요청인증 fire-and-forget
  • 3개 모두 컴파일 성공, /Users/ef/crowny-data/bin/ 배포, 재기동 완료

✅ 완료: church ES module 패치 (2026-04-17)

  • createRequire로 sso-middleware.js 로드
  • handler async 전환 + req.ssoUser 주입
  • 9310 HTTP 200 정상

✅ 완료: 토큰 발급 UX (2026-04-17)

  • auth.crowny.org/login — 로그인 폼, 쿠키 발급 (crowny_token, 7일), ?return= 리디렉트
  • auth.crowny.org/register — 회원가입 폼, 자동 로그인+쿠키+리디렉트
  • 각 서비스에서 `auth.crowny.org/login?return=https://서비스.crowny.org` 로 연결 가능

잔여: 레거시 독자 인증 제거

  • patent(8), church(21), market(6) — 3개만 자체 인증 보유
  • 현재 SSO와 병행 운영 가능 (req.ssoUser + 기존 인증 둘 다 체크)
  • 향후 전환: requireAdmin → req.ssoUser.role=='admin' 등으로 점진적 교체

✅ 완료: VM 맵꺼내 근본 수정 (2026-04-17)

  • crownyc.c:5425 — `맵꺼내(없는키)` 반환값 `-2147483647` → 빈 문자열 `""` 로 교체
  • 빌드: `cc -O2 -framework Security -framework CoreFoundation -o crownyc crownyc.c`
  • 영향: 모든 맵 기반 한선씨 프로그램 정상화, 회원등록 성공 확인

✅ 완료: 회원관리.한선 맵 통일 (2026-04-17)

  • 9개 배열 반환 → 맵 변환 (`_결과성공()` / `_결과오류(메시지)` 헬퍼 추가)
  • 컴파일 검증 완료

✅ 완료: SSO 위젯 (2026-04-17)

  • `/Users/ef/crowny-data/auth/sso-widget.js` — 자동 로그인/로그아웃 위젯
  • auth.crowny.org/sso-widget.js 로 서빙
  • 11개 서비스 프론트엔드에 `