다운로드 버튼을 제거하면 읽기 전용 워크플로우를 지원할 수 있지만, 보이는 문서를 복사할 수 없게 만들지는 못합니다. 안전한 구현을 위해서는 서버 측 권한 부여, 보호된 저장소, 짧은 세션, 세심한 로깅, 그리고 사용자 인터페이스 제한이 달성할 수 있는 것에 대한 솔직한 이해가 필요합니다.
Doconut은 비즈니스 애플리케이션용 임베디드 .NET 문서 뷰어를 제공합니다. 이 튜토리얼은 추측된 구성 속성이나 기타 문서화되지 않은 Doconut 소스 코드를 공개하지 않고, 주변 보안 설계를 설명합니다.

1. “읽기 전용”의 의미 정의하기
정확한 정책부터 시작하세요. 팀마다 “읽기 전용”을 다음과 같이 해석할 수 있습니다:
- 원본 파일을 다운로드 옵션으로 제공하지 않음.
- 내보내기 동작을 표시하지 않음.
- 인쇄를 허용하지 않음.
- 인증된 세션 동안에만 보기 허용.
- 사용자가 저장소 위치에 직접 접근하지 못하도록 차단.
- 문서가 열릴 때 감사 기록을 추가.
이들은 별개의 제어 수단입니다. 필요한 항목을 결정하고 선택한 Doconut 제품, 플러그인 및 라이선스가 필요한 뷰어 동작을 지원하는지 확인하세요.
보이는 문서를 완전히 캡처할 수 없다고 약속해서는 안 됩니다. 스크린샷, 카메라, 접근성 도구, 브라우저 기능, 그리고 표시된 픽셀에 대한 권한 있는 접근은 절대적인 방지를 비현실적으로 만듭니다.
2. 원본 파일 보호하기
원본 문서는 보호된 서버 측 저장소에 보관해야 합니다.
사용할 항목:
- 서버에서 생성된 문서 식별자
- 제한된 저장소 권한
- 필요 시 휴식 중 암호화
- 문서화된 보존 정책
- 업로드, 보기, 내보내기, 관리에 대한 별도 권한
스토리지 자격 증명, 무제한 파일 경로, 영구적인 공개 URL을 클라이언트에 전달하지 마세요.
3. 모든 문서 요청에 권한 부여하기
ASP.NET Core에서 뷰어 라우트를 표준 인증 및 권한 부여 메커니즘으로 보호합니다.
서버는 다음을 확인해야 합니다:
- 사용자가 인증되었는지.
- 문서가 존재하는지.
- 사용자가 해당 문서를 볼 권한이 있는지.
- 요청된 동작이 사용자의 역할 및 현재 워크플로우 상태에서 허용되는지.
[Authorize] 특성을 사용해 라우트를 보호하고, 정책, 클레임 또는 리소스 기반 권한 부여를 통해 문서별 결정을 내릴 수 있습니다.
문서 데이터, 페이지, 내보내기, 주석 또는 인쇄 출력 등을 반환하는 모든 엔드포인트에도 권한 부여가 적용되어야 합니다. 초기 페이지만 보호하고 다른 경로를 노출하면 안 됩니다.
4. 보기와 다운로드 권한 분리하기
숨겨진 버튼을 추론하기보다 권한을 명시적으로 모델링하세요.
예시:
CanViewDocumentCanDownloadOriginalCanExportDocumentCanPrintDocumentCanManageDocument
이 이름들은 애플리케이션 정책을 설명할 뿐이며 Doconut API와는 무관합니다. 권한 부여 레이어는 해당 동작을 수행하기 전에 서버에서 이를 평가해야 합니다.
관리자는 다운로드 권한을 가질 수 있고, 다른 인증 사용자는 보기 권한만 가질 수 있습니다. 두 사용자는 동일한 애플리케이션 페이지를 공유하되, 서로 다른 권한을 부여받게 됩니다.
5. 공식 문서에서 뷰어 구성하기
설치된 Doconut 버전에 대해 문서화된 구성 이름과 통합 단계만 사용하세요.
검증된 Doconut Viewer page에서는 현재 제품 정보를 확인할 수 있습니다. Doconut download and documentation page에서는 설치 리소스와 버전별 예제를 제공합니다.
설치된 제품이 다운로드 동작을 숨기거나 비활성화하는 지원 설정을 제공한다면:
- 공식 문서에 따라 적용합니다.
- 이를 사용자 인터페이스 및 워크플로우 제어로 간주합니다.
- 관련 서버 엔드포인트를 보호된 상태로 유지합니다.
- 권한이 없는 사용자가 직접 요청으로 우회할 수 없음을 테스트합니다.
관련 없는 기사에서 추측한 구성 속성을 복사하고 지원된다고 가정하지 마세요.
6. 뷰어 통합을 서비스 뒤에 두기
전용 애플리케이션 서비스는 다음을 수행할 수 있습니다:
- 권한이 부여된 문서 해결
- 승인된 저장소 추상화를 통해 열기
- 지원되는 뷰어 구성 적용
- 스트림 및 임시 리소스 해제
- 정제된 감사 이벤트 기록
- 컨트롤러에 안전한 오류 반환
이렇게 하면 SDK‑특정 세부 사항이 권한 부여 정책 및 프레젠테이션 코드에 섞이지 않게 됩니다.
Stream, FileStream, CancellationToken 및 의존성 주입된 서비스와 같은 표준 .NET 타입을 사용해 애플리케이션 경계를 형성하세요. Doconut 자체 문서를 따라 SDK 호출을 구현합니다.
7. 방어 심층 적용하기
읽기 전용 워크플로우에는 다음이 포함될 수 있습니다:
- 인증 및 리소스 수준 권한 부여
- 네트워크 및 저장소 격리
- 짧은 세션 기간
- 제한된 내보내기 및 인쇄 라우트
- 지원되는 경우 워터마크 적용
- 문서 접근에 대한 감사 이벤트
- 속도 제한 및 동시성 제어
- 명확한 보존 및 정리 규칙
- 비정상적인 접근 패턴에 대한 보안 모니터링
단일 제어만으로는 충분하지 않습니다. 서버 보호 없이 숨겨진 버튼은 특히 우회하기 쉽습니다.
8. 데이터 유출 없이 접근 기록하기
유용한 감사 필드 예시:
- 애플리케이션 문서 식별자
- 권한이 부여된 사용자 식별자
- 타임스탬프
- 요청된 동작
- 결과
- 상관 관계 식별자
- 거부 또는 실패 사유(정제된 형태)
다음은 기록하지 말아야 할 항목:
- 문서 내용
- 저장소 자격 증명
- 접근 토큰
- 민감한 URL
- 전체 서버 경로
- 불필요한 개인 정보
감사 로그는 민감도와 보존 요구 사항에 따라 보호하세요.
9. UI 우회 시도 테스트하기
툴바 버튼이 사라졌다고 해서 테스트를 멈추지 마세요.
읽기 전용 사용자가 다음을 할 수 있는지 확인하세요:
- 원본 파일 라우트를 직접 요청
- 내보내기 또는 인쇄 라우트 호출
- 문서 식별자 변경
- 만료된 세션 재사용
- 다른 사용자의 문서 접근
- 마크업이나 네트워크 응답에서 저장소 URL 탐색
- 내부 경로를 노출하는 상세 오류 트리거
- 권한이 회수된 후에도 접근 유지
자동화된 권한 부여 테스트와 수동 브라우저 테스트를 모두 포함합니다.
10. 사용자 기대치 정확히 설정하기
정책이 수행하는 일을 설명하세요:
- 애플리케이션이 제공하는 다운로드 또는 내보내기 워크플로우를 제한합니다.
- 권한이 부여된 사용자만 접근할 수 있도록 제한합니다.
- 보기 이벤트를 기록할 수 있습니다.
- 원본 파일은 서버 제어 뒤에 보관됩니다.
또한 보장하지 못하는 부분을 명시하세요:
- 모든 환경에서 사진 촬영이나 스크린샷을 방지할 수 없습니다.
- 이미 본 정보와 기억은 취소할 수 없습니다.
- 계약, 조직 또는 엔드포인트 보안 제어를 대체하지 않습니다.
이 구분은 제품에 대한 신뢰성을 높이고, 이해관계자가 고감도 자료에 적합한 제어 수단을 선택하도록 돕습니다.
Verification Checklist
- 보기와 다운로드가 별도 서버 권한으로 구분됨.
- 모든 문서 요청이 리소스 수준 권한 부여를 수행함.
- 원본 파일에 영구적인 공개 URL이 없음.
- 뷰어 설정이 설치된 Doconut 버전의 문서에서 가져옴.
- 숨겨진 동작에 대한 서버 엔드포인트가 보호됨.
- 임시 데이터에 대한 정리 프로세스가 정의됨.
- 감사 로그에 문서 내용 및 비밀 정보가 포함되지 않음.
- 권한 없는 직접 요청이 테스트로 커버됨.
- 오류 응답이 내부 저장소 세부 정보를 노출하지 않음.
- 제품 복사본이 절대적인 복제 방지를 주장하지 않음.
Where Doconut Fits
Doconut은 .NET 애플리케이션 내 임베디드 뷰어 레이어를 제공합니다. 애플리케이션은 신원 확인, 권한 부여, 권한 관리, 저장소, 보존, 감사 및 “읽기 전용” 약속의 진실성을 책임집니다.
보안 요구 사항과 대표 문서를 기준으로 Doconut .NET document viewer SDK를 평가하세요. 추측된 소스 코드에 의존하기보다 공식 리소스를 사용해 지원되는 구성을 확인하십시오.
Conclusion
읽기 전용 문서 워크플로우는 방어 심층 설계이며, 단순한 Boolean 플래그가 아닙니다. 원본 파일을 보호하고, 모든 요청에 권한을 부여하며, 보기와 다운로드 권한을 분리하고, 지원되는 뷰어 설정을 검증하며, 접근을 감사하고, 인터페이스 우회 시도를 테스트하세요.
이러한 제어가 구현되면 Doconut은 임베디드 문서 경험을 제공하고, ASP.NET 애플리케이션은 그 주위의 보안 정책을 강제할 수 있습니다.