重新發佈 (C++)
概觀
此概觀著重於在 MIP SDK 中重新發佈是應用程式必須允許使用者編輯檔案的特定案例,但想要維護擁有者、許可權、內容密鑰等原始 發佈授權 資訊。
模式看起來可能像這樣:
- 用戶開啟受保護的檔進行編輯。
- 如果使用者已獲授與適當的許可權,則只能編輯檔案。
- 使用者編輯,然後儲存檔。
要完成這項工作的 MIP SDK 虛擬程式代碼可能如下所示:
mip::FileHandler
建立指向目標檔案的 。mip::ProtectionHandler
儲存 由 的 方法公開的mip::FileHandler
GetProtection()
。- 藉由呼叫
AccessCheck()
方法來檢查使用者是否具有EDIT許可權。 - 使用
mip::FileHandler
的GetDecryptedTemporaryFileAsync()
或GetDecryptedTemporaryStreamAsync()
取得暫時解密的輸出。 - 編輯暫存盤案或串流內容並儲存。
- 建立
mip::FileHandler
指向暫存盤的新實例,並使用SetProtection()
方法,提供儲存mip::ProtectionHandler
為 參數的 。 - 認可變更。
mip::ProtectionHandler
使用源檔中的 ,將會在編輯的檔上維護擁有者、內容識別碼、內容密鑰等。 此重新發佈案例需要應用程序維護原始 mip::ProtectionHandler
的參考。
實作
如先前所述,類別 mip::FileHandler
會公開讀取、寫入及移除標籤和保護資訊的方法。 如需支援作業的完整清單,請檢閱 mip::FileHandler 的參考。
此案例使用 下列方法 mip::FileHandler
:
GetProtection()
CommitAsync()
GetDecryptedTemporaryFileAsync()
SetProtection()
此案例也會使用 mip::ProtectionHandler
,其會公開函式來加密和解密受保護的數據流和緩衝區、執行存取檢查、取得發佈授權,以及從受保護的資訊取得屬性。 方法 AccessCheck()
將用來驗證使用者是否有權編輯檔案。
若要順利完成此重新保護案例,請檢閱 [後續步驟] 下的 [快速入門],並確定應用程式會建置並成功列出標籤。
從檔案建立保護處理程式並解密檔案
mip::ProtectionHandler
會公開函式來加密和解密受保護的數據流和緩衝區、執行存取檢查、取得發佈授權,以及從受保護的資訊取得屬性。 mip::ProtectionHandler
對像是藉由提供 ProtectionDescriptor 或串行化發行授權來建構。 在此使用案例中,我們會隱含地使用發佈授權作為發佈授權,當解密已保護的內容,或保護已經建構授權的內容時。
mip::FileHandler
會公開名為 GetProtection()
的方法,這個方法會從與 mip::FileHandler
相關聯的檔案擷取mip::ProtectionHandler
。 mip::ProtectionHandler
一旦擷取物件,就可以用來驗證用戶的檔案存取層級,解密檔案,稍後在編輯檔案之後加密檔案。
mip::ProtectionHandler
AccessCheck()
的 用來驗證使用者具有檔案的特定許可權,並根據結果傳回布爾回應。 例如,若要確認使用者有權編輯,請呼叫傳入值 「EDIT」 的方法。 如果結果為 true,允許使用者編輯檔案。 一旦驗證編輯許可權,請使用 mip::FileHandler
來GetDecryptedTemporaryFileAsync()
擷取暫時解密的檔案。
如需各種用戶權力的進一步詳細數據,請參閱 Azure 資訊保護 的用戶權力。
重要
存取檢查和強制執行完全由應用程式開發人員決定。 具有 VIEW 許可權的用戶能夠解密受保護的資訊。 應用程式必須驗證授與使用者的許可權集,並透過資訊保護控件強制執行這些許可權,例如防止複製、編輯或擷取螢幕快照。 無法正確實作保護控件可能會導致敏感性資訊暴露。
套用保護來儲存和發佈編輯的檔案
解密檔案之後,即可編輯檔案。 編輯作業完成後,即可認可變更。 IFileHandler
使用上述暫存盤來建立 物件,以處理認可的檔案。 然後,可以使用從源檔擷取的對象來保護 IProtectionHandler
暫存盤。