Repository navigation
[Worker Link] 로그인 없는 근로자 보안 링크와 응답 구현 #7
Copy link
Copy link
Closed
Labels
area:serverSpring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외Spring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외priority:P0MVP 진행을 막는 최우선 핵심 작업MVP 진행을 막는 최우선 핵심 작업security:privacy개인정보·접근권한·토큰·보안 영향이 있는 작업개인정보·접근권한·토큰·보안 영향이 있는 작업type:feature사용자 또는 Agent가 사용하는 기능 개발사용자 또는 Agent가 사용하는 기능 개발
Description
한 줄 목표
근로자가 계정 없이도 만료되는 보안 링크로 승인된 최소 안내만 확인하고, 제한된 응답과 요청 문서만 제출하도록 구현합니다.
근로자가 할 수 있는 행동
- 안내 확인
- 질문 있음
- 이해 안 됨
- 요청받은 파일 제출
링크 하나로 다른 업무·근로자·사업장 정보를 탐색할 수 없어야 합니다.
소유 API 4개
-
POST /tasks/{taskId}/worker-link— HR이 승인된 업무 링크 발급/회전 -
GET /public/worker-links/{token}— 근로자용 최소 안내 조회 -
POST /public/worker-links/{token}/documents— 토큰 범위의 문서 제출 -
POST /public/worker-links/{token}/responses— 허용된 응답 제출
별도 재발급 endpoint를 만들지 않습니다. 발급 요청의 rotateExisting=true가 기존 링크를 폐기하고 새 링크를 발급하며, 같은 Idempotency-Key 재시도로 링크가 중복 생성되지 않아야 합니다.
구현 범위
-
WorkerLink,WorkerResponse, token-scoped upload 연결 모델과 migration - 충분히 긴 난수 token 생성, DB에는 원문이 아닌 hash 저장
- 만료·폐기·회전·최대 사용 횟수 정책
- 승인된 현재 Task version에서만 링크 발급
- 공개 조회 DTO에 최소 안내·언어·허용 행동만 노출
- 문서를 격리 저장한 뒤 크기·MIME·hash·파일명 검증
- #13의
FileStorageport 사용, 검증된 ID만 response와 Task에 연결 -
QUESTION,NOT_UNDERSTOOD, 문서 제출 시 HR 후속 업무/활동 이력 생성 - 접근·응답·제출·만료·폐기 event와 actor
WORKER_LINK기록 - token 원문이 URL 외 로그·metric·trace에 남지 않도록 필터링
- Rate Limit과 반복 공격에 동일한 안전 오류 적용
기본 정책
- 재발급 시 이전 링크는 즉시 폐기합니다.
- 만료·폐기·변조 token은 존재 여부를 구분하지 않는 오류로 응답합니다.
- 자유 입력은 허용 목적, 길이, 파일 형식을 제한합니다.
- 업로드 완료가 곧 문서 승인이나 Task 완료를 뜻하지 않습니다.
- 자동 외부 메시지 발송은 MVP 범위가 아닙니다.
완료 조건
- 승인 전 또는 승인 무효화된 업무에는 링크를 발급할 수 없습니다.
- 유효한 링크에서 최소 안내·응답·문서 제출만 가능합니다.
- 만료·폐기·변조 token과 타 업무 접근이 차단됩니다.
- 재발급 후 이전 링크가 동작하지 않습니다.
- DB 유출만으로 사용 가능한 token을 복원할 수 없습니다.
- 응답에 전화번호·여권번호·외국인등록번호·내부 메모가 없습니다.
- 같은 응답/문서 재시도로 중복 활동이나 Task가 생기지 않습니다.
- 링크 보안, 파일 제한, 상태 전이, 감사 통합 테스트가 있습니다.
이번 이슈에서 하지 않는 것
- 근로자 계정과 비밀번호
- 공개 링크에서 HR 내부 메모 노출
- 범용 파일 공유·메시지 앱 자동 발송
- 바이러스 검사 인프라 전체 운영
선행/후속 관계
- 선행: [Auth & Security] JWT 인증·사업장 권한·멀티테넌시 구현 #4, [Worker] 근로자 기본정보·서류 메타데이터 API 구현 #5, [Task Workflow] 업무카드·체크리스트·상태 전이 구현 #6, [Approval & Audit] 승인·반려·외부제출·증빙·완료·감사 로그 구현 #11, [Document] 통합 문서함·파일 업로드·문서 준비도 구현 #13
- 연결: [Reliability] 이벤트 유실 방지·재처리 기반 구현 #25, [E2E] 제품 대표 복합 요청 시나리오·데모 런북 완성 #10
- 상위 목표: [EPIC] FOWOCO Server Roadmap · Controlled AI Workflow MVP #2
용어 도움말
- Token hash: token 원문을 복원하기 어렵게 변환해 저장한 값입니다.
- 격리 저장: 검증이 끝나기 전 제출 파일을 일반 문서와 분리하는 처리입니다.
- Rate Limit: 짧은 시간의 과도한 요청을 제한하는 규칙입니다.
2026-08-04 · PR #76 병합 전 확인
위의 체크 표시는 PR #76 브랜치에 구현된 범위를 뜻하며, 아직 main 반영 완료를 뜻하지 않습니다.
다음 세 항목을 수정·재검토한 뒤 병합합니다.
- 공개 경로를 canonical 계약인
/public/worker-links/**로 통일 - 공개 문서 제출에서
Idempotency-Key를 실제 저장·중복 방지에 적용 - CORS에서
Idempotency-Key를 허용하고 preflightOPTIONS통합 테스트 추가
PR #76은 Flyway V11의 소유자입니다. 이 PR이 먼저 병합된 뒤 #82가 V12/V14를 최신 main에서 재검증합니다.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:serverSpring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외Spring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외priority:P0MVP 진행을 막는 최우선 핵심 작업MVP 진행을 막는 최우선 핵심 작업security:privacy개인정보·접근권한·토큰·보안 영향이 있는 작업개인정보·접근권한·토큰·보안 영향이 있는 작업type:feature사용자 또는 Agent가 사용하는 기능 개발사용자 또는 Agent가 사용하는 기능 개발
Activity
feat(file): #7 재사용 대비 verified 필드 추가
feat(file): #7 재사용 대비 verified 필드 추가
feat(file): #7 재사용 대비 verified 필드 추가
feat: 통합 문서함·파일 업로드·문서 준비도 구현 (#57)