← 목록
AI 2026-07-20 4KB 읽기 4분

CrownyAI 네이티브 로그인 창 + 계정 상태

개요

CrownyAI.app(네이티브 크라우니브라우저/오피스)이 crowny-ai 서버(ai.crowny.org)의 통합ID로 로그인하고, ownerToken을 macOS Keychain에 보관·복원·표시·폐기한다. 무로그인 로컬 편집은 그대로 허용(로그인=클라우드 동기 전용).

핵심 사실 (재확인)

  • auth 서버 실주소 = :9852 (레지스트리·health·/api/auth/login 실재).
작업지시의 :9613은 nginx 정적 스텁("crowny server", 14B)일 뿐 auth 없음. → CAAuthBaseURL() 기본 http://127.0.0.1:9852, 환경변수 CROWNY_AI_URL로 오버라이드.
  • 토큰 모델 = 지속형 ownerToken(u_...) 1개. access/refresh JWT 아님, 서버측 만료 없음,
/api/auth/verify·/api/auth/refresh 엔드포인트 없음. 로그인 응답 {ok,username,ownerToken}.
  • 같은 날 병렬 세션이 추가한 /api/office/save|list|get|delete바로 이 ownerToken
게이트(Authorization: Bearer / X-Crowny-Owner)로 소비 → 다음 조각(파일 저장/동기)과 정합. 실측: 저장 토큰으로 office/list 200 {ok,docs:[]}, 무토큰 401.

무엇을 했는지

native/crowny-ai-main.m (네이티브 IO만 수정)

  • CAAccount 싱글턴: loginWithUsername:password:completion:(NSURLSession POST /api/auth/login),
Keychain(kSecClassGenericPassword, service=org.crowny.ai.account) store/load/delete, restoreFromKeychain(앱 재시작 자동 로그인), logout(토큰 폐기). loggedIn/username/ownerToken 전역 접근.
  • CALoginWindowController: 로그인 시트/창(아이디·비밀번호·상태라벨·로그인/취소, Enter=로그인).
성공→창 닫힘, 실패→에러 표시, 로그인 중→버튼 비활성. 오프라인=우아한 "연결 실패" 메시지.
  • 계정 메뉴: 메뉴바 "계정" 동적 재구성(rebuildAccountMenu) — 로그아웃 시 "로그인…",
로그인 시 "<user>(로그인됨)" + "로그아웃"(CADialog 확인). CAAccountChangedNotification 관측.
  • didFinishLaunching에서 restoreFromKeychain 호출 → 저장 토큰 복원 + 메뉴 갱신.

native/계정상태.한선 (한선씨 동반)

토큰 상태기계(로그인전이·토큰유효·갱신필요·만료갱신·로그아웃·무로그인 로컬편집허용) + 4상 토큰판정(티 유효/옴 만료갱신/타 거부/음 무로그인). hanseonc_high 컴파일 + crownyc run 자가검증 13/13 PASS. 지속형(만료==0 무기한)과 JWT(만료>0 시각비교) 양쪽 커버.

게이트 결과

  • 계정상태.한선 13/13 · make ai 빌드 성공(경고1=기존 무관) · CrownyAI 3초 생존 ALIVE
  • 로그인 왕복(하네스 acct_test.m, 실계정 crownyai_qa, 라이브 :9852):
[1] 로그인 OK 토큰획득 · [2] 재시작 Keychain 복원 OK 토큰일치 · [3] 로그아웃 토큰폐기 OK → PASS
  • 오프라인(죽은 포트): "연결 실패…" 우아한 실패, 크래시 없음
  • 계정명 표시 + 로그인 창 렌더 스크린샷 확인(메뉴바 계정 + 로그인 시트)
  • 무로그인 로컬편집 허용(로그인 미호출로도 앱 정상, AI홈/런처 정상)
  • 문서 회귀 27/27 PASS(오피스 브릿지 무수정) · 기존 저장/열기/내보내기 메뉴 무회귀(컴파일 정합)

관련 파일

  • /Users/ef/crownybrowser/native/crowny-ai-main.m (CAAccount·CALoginWindowController·계정 메뉴)
  • /Users/ef/crownybrowser/native/계정상태.한선 (상태기계 정본, 13/13)
  • /Users/ef/crowny-ai/engine/auth.js (참고: login→{ok,username,ownerToken})

무수정 확인

crownyBridge.js·앱 번들(bundle/office/app)·crowny-shell.m·Makefile 기존타깃 무수정. Security.framework는 ai LDFLAGS에 기존부터 링크되어 있어 Makefile 변경 불요.

잔여 이슈

  • 실계정 시연용 crownyai_qa 계정이 users.json에 남음(무해, 필요시 제거).
  • refresh는 서버에 엔드포인트 없어 미배선(지속형 토큰이라 불필요) — 한선씨는 일반 케이스 커버.
  • 다음 조각: CAAccount.ownerToken을 오피스 cdf 클라우드 저장/동기(/api/office/save)에 사용.