← 목록
기타 2026-04-16 6KB 읽기 7분

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상태
patent9732org.crowny.patent✅ 재기동 완료
stock9731org.crowny.stock
artist9734org.crowny.artist
avl9737org.crowny.avl
avls9736org.crowny.avls
card9450
mind7750
trading7740
int9500
security9502미등록⚠️
church (9310): ES module + 동기 핸들러 — 별도 패치 설계 필요 (스킵)

패치 내용 (각 server.js에 2줄 삽입):

jsconst 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-<timestamp> 로 원본 보존

    잔여 이슈

    ✅ 완료: 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개 서비스 프론트엔드에 <script> 삽입 (patent/stock/artist/avl/avls/card/mind/trading/int/market/church)
    • 동작: 쿠키 확인 → 있으면 사용자 표시+로그아웃, 없으면 로그인 버튼 → auth.crowny.org/login?return= 리디렉트

    ✅ 완료: 셀 슬롯 접근 API 불일치 수정 (2026-04-17)

    • 원인: 셀읽(db,id) 2인자인데 회원관리가 셀읽(db,id,idx) 3인자로 호출 → idx 무시 → 셀맵 전체 반환 → 비교 실패
    • 해결: _셀슬롯(db, id, idx) 래퍼 추가 + 12건 일괄 치환
    • 결과: 회원등록/인증/조회/서비스계정/지갑 전체 파이프라인 정상 동작 (VM 에러 0건)