선택 지우기를 사용하여 파일을 보호하는 방법(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

선택 지우기를 사용하면 앱의 사용자가 앱 데이터에 대한 권한이 더 이상 없을 경우 취소될 수 있는 앱에서 보호된 파일을 식별할 수 있습니다. 이 시나리오는 직원이 자신의 장치를 가정으로 가져갈 수 있는 기업에 일반적입니다. 직원이 퇴사할 경우 개인 장치에 있는 회사 파일을 제거할 수 있습니다.

예를 들어 직원이 자신의 개인용 태블릿 컴퓨터를 사무실로 가져와 비즈니스 메일에 사용합니다. 메일 앱에서 선택 지우기를 사용하여 컴퓨터에 로컬로 회사 메일을 저장하는 데 사용되는 모든 파일을 보호할 수 있습니다. 이 앱은 "sample.com"과 같은 엔터프라이즈 식별자를 사용하여 회사와 해당 파일을 연결합니다. 사용자가 더 이상 회사의 직원이 아닌 경우 다음에 회사 메일 앱을 열면 앱은 사용자가 더 이상 직원이 아님을 확인하고 엔터프라이즈 식별자로 보호된 모든 파일에 대한 액세스 권한을 취소하도록 선택 지우기에 알릴 수 있습니다. 앱이 파일에 액세스하려고 시도하여 파일이 취소되었음을 확인하면 해당 파일을 삭제할 수 있습니다.

사전 요구 사항

  • 이 항목의 샘플 코드에서는 다음 전역 변수가 설정되어 있다고 가정합니다.

    var appRootFolder = Windows.Storage.ApplicationData.current;
    var enterpriseIdentity = "example.com";
    var accessDeniedHResult = -2147024891;  // Access Denied (0x80070005)
    

선택 지우기를 사용하여 파일이나 폴더 보호

protectAsync 메서드를 사용하면 선택 지우기를 사용하여 파일이나 폴더를 보호할 수 있습니다. 이 메서드는 이전 코드 예제에 표시된 대로 "example.com"과 같은 엔터프라이즈 식별자로 보호된 파일을 식별합니다. protectAsync 메서드를 사용하여 폴더를 보호하면 해당 폴더의 모든 파일이 같은 보호 기능을 상속합니다.

// Add a folder and protect it using Selective Wipe.
function addFolder(folderName) {
    appRootFolder.localFolder.createFolderAsync(folderName).then(
        function (newFolder) {
            protectItem(newFolder);
        });
}

// Add a file and protect it using Selective Wipe.
function addFile(fileName, folder) {
    folder.createFileAsync(fileName).then(
        function (newFile) {
            Windows.Security.EnterpriseData.
                FileRevocationManager.getStatusAsync(newFile).then(
                    function (status) {
                        if (status != Windows.Security.EnterpriseData.
                                FileProtectionStatus.Protected) {
                            protectItem(newFile, enterpriseIdentity);
                        }
                    });
        },
        function (err) {
            // Handle error. For example, file already exists.
        });
}

function protectItem(item, enterpriseIdentity) {
    Windows.Security.EnterpriseData.FileRevocationManager.
        protectAsync(item, enterpriseIdentity).then(
            function (status) {
                return status;
            });
}

보호된 파일 및 폴더에 대한 액세스 권한 취소

앱에서 사용자가 더 이상 유효하지 않음을 확인하면 다음 예제에 표시된 대로 revoke 메서드를 사용하여 엔터프라이즈 ID로 보호된 모든 파일 및 폴더에 대한 액세스 권한을 신속하게 취소할 수 있습니다. revoke 메서드로 파일이 삭제되지는 않습니다. revoke 메서드는 파일을 액세스할 수 없는 상태로 전환합니다. 다음 예제에 표시된 코드를 앱에 추가하여 액세스할 수 없거나 취소된 파일을 삭제할 수 있습니다.

function initializeApp(userName) {
    if (getUserStatus(userName) == "Not Found") {
        Windows.Security.EnterpriseData.FileRevocationManager.revoke(enterpriseIdentity);
    }
}

파일의 상태 가져오기

getStatusAsync 메서드를 사용하여 파일이나 폴더의 선택 지우기 보호 상태를 확인할 수 있습니다. 그러면 파일이 보호되는지 여부, 파일이 컴퓨터의 다른 사용자에 의해 보호되는지 여부 등을 알려줍니다. 일반적으로 getStatusAsync 메서드는 보호된 파일을 삭제해야 하는 경우를 결정하는 데 사용됩니다. 예를 들어 보호된 파일이 취소된 경우 파일 내용에 액세스하려고 하면 "액세스가 거부되었습니다." 예외가 발생합니다. 이러한 예외가 발생하는 경우 다음 예제에 표시된 대로 getStatusAsync 메서드를 사용하여 파일이 선택 지우기에 의해 취소되었는지 확인한 다음 취소된 경우 파일을 삭제할 수 있습니다.

function getFileContents(filePath) {
    var stream;
    var file;

    Windows.Storage.StorageFile.getFileFromPathAsync(filePath).then(
        function (f) {
            file = f;
            file.openReadAsync().then(
                function (s) {
                    stream = s;
                    return stream;
                },
                function (err) {
                    if (err.number == accessDeniedHResult) {
                        // Delete file if it has been revoked.
                        selectiveWipeCleanup(file);
                    }
                });
        });

    return null;
}

// Delete items revoked by Selective Wipe.
function selectiveWipeCleanup(file) {
    Windows.Security.EnterpriseData.FileRevocationManager.
        getStatusAsync(file).then(
            function (status) {
                if (status == 
                    Windows.Security.EnterpriseData.FileProtectionStatus.revoked) {
                        file.deleteAsync();
                }
        });

}

보호된 파일 복사

copyAsync 또는 copyAndReplaceAsync 메서드를 사용하여 파일을 복사하는 경우 복사한 파일의 선택 지우기 보호가 파일의 새 복사본에 자동으로 적용되지 않습니다. 새 파일을 "다른 이름으로 저장"하는 위치의 파일에 적용됩니다. 이런 경우 다음 예제에 표시된 대로 copyProtectionAsync 메서드를 사용하여 원본 파일에서 선택 지우기 보호를 복사할 수 있습니다.

function copyFile(file, newFolder) {
    file.copyAsync(newFolder).then(
        function (newFile) {
            Windows.Security.EnterpriseData.FileRevocationManager.
                copyProtectionAsync(file, newFile);
        },
        function (err) {
            // Handle error. For example, copy already exists.
        });
}

전체 예제

관련 항목

FileRevocationManager 샘플

Windows.Security.EnterpriseData namespace

앱 보안