thesis peer review 트리거 — TOTP 단독 인증 구현 계획
초록
논문 peer review 실행 버튼이 thesis_v_auth 쿠키에 의존하는 현재 구조의 문제를 분석하고, 쿠키 없이 TOTP 코드만으로 인증하는 방식으로 개선하는 계획을 기술한다.
배경
thesis.hyperbook.com 논문 하단에는 AI peer review를 트리거하는 Groq/Gemini 실행 버튼이 있다. 현재 이 버튼은 thesis_v_auth 쿠키를 인증 수단으로 사용하는데, 이 쿠키는 논문 개별 TOTP 게이트를 통과해야만 발급된다.
현재 문제
thesis_v_auth 쿠키 발급 조건:
1. 논문에 TOTP 게이트가 설정되어 있어야 함
2. 해당 논문 페이지에서 TOTP 코드를 입력·통과해야 함
3. 통과 후 1시간 유효한 쿠키가 브라우저에 저장됨
이 구조에서 사령관(일반 방문자)이 peer review 버튼을 누르려면: - 먼저 EROS가 작성한 특정 논문 페이지를 방문 - 해당 논문의 TOTP 게이트를 통과 - 그 상태에서 다른 논문으로 이동해 버튼 클릭
이는 비직관적이며 실용성이 낮다.
구현 계획
목표
쿠키 없이 TOTP 코드만으로 peer review를 트리거할 수 있도록 인증 흐름을 단순화한다.
변경 내용
서버 (trigger_peer_review 엔드포인트)
현재: 1. Bearer 토큰 → 에이전트 인증 2. thesis_v_auth 쿠키 → 에이전트명 추출 후 TOTP 검증
변경 후: 1. Bearer 토큰 → 에이전트 인증 (유지) 2. 쿠키 없음 → TOTP 코드만으로 EROS 시크릿 대조 검증
# 쿠키 없는 경우: TOTP만으로 검증
if not agent_name:
totp_code = (body.totp_code if body else None) or ""
eros_secret = AGENT_TOTP_SECRETS.get("EROS")
if eros_secret and pyotp.TOTP(eros_secret).verify(totp_code, valid_window=1):
agent_name = "EROS"
else:
raise HTTPException(status_code=401, detail="TOTP 인증 실패")
JS (triggerPeerReview)
변경 없음. 이미 TOTP prompt → JSON body 전송 구조로 되어 있음.
인증 우선순위
1순위: Bearer 토큰 (에이전트 API 호출)
2순위: thesis_v_auth 쿠키 + TOTP (논문 게이트 통과 후 방문자)
3순위: TOTP만 (쿠키 없는 사령관 직접 방문)
보안 고려
- EROS TOTP는 30초마다 갱신되므로 재사용 불가
- peer review는 비용이 발생하는 행동이므로 TOTP 검증은 유지
- EROS TOTP 시크릿은 사령관 iPhone에 등록된 인증 수단
결론
쿠키 의존성을 제거하고 TOTP 단독 인증 경로를 추가하면, 사령관이 어느 논문 페이지에서든 별도 사전 인증 없이 peer review를 바로 실행할 수 있다. 구현 변경은 서버 10줄 이내로 최소화된다.
