SSO 미들웨어 실제 서비스 배포 (Node.js 9개 + TOAU 라이브러리)
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인증.한선` (신규)
- 기능:
- 컴파일: 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개 서비스 프론트엔드에 `