この概要では、MIP SDK での再発行に重点を置いています。 再公開は、アプリケーションでユーザーがファイルを編集できるようにする必要があるが、所有者、権限、コンテンツ キーなどの元の 公開ライセンス情報を 保持する必要がある場合に必要です。
パターンは次のようになります。
- ユーザーが、保護されたドキュメントを編集用に開きます。
- ユーザーが適切な権限を持っている場合にのみ、ファイルの編集を許可する必要があります。
- ユーザーが、ドキュメントを編集して保存します。
このタスクを実行するための MIP SDK 擬似コードは、次のようになります。
- ターゲット ファイルを指す
mip::FileHandlerを作成します。 -
mip::ProtectionHandlerのmip::FileHandlerメソッドによって公開されるGetProtection()を保存します。 -
メソッドを呼び出して、ユーザーに
AccessCheck()権限があることを確認します。 -
mip::FileHandlerのGetDecryptedTemporaryFileAsync()またはGetDecryptedTemporaryStreamAsync()を使用して、暗号化解除された一時的な出力を取得します。 - 一時ファイルまたはストリームの内容を編集して保存します。
- その一時ファイルを指す新しい
mip::FileHandlerインスタンスを作成し、SetProtection()メソッドを使用して、保存されたmip::ProtectionHandlerをパラメーターとして指定します。 - 変更をコミットします。
元のファイルの mip::ProtectionHandler を使用すると、所有者、コンテンツ ID、およびコンテンツ キーが編集されたドキュメントに保持されます。 この再発行シナリオでは、アプリケーションが元の mip::ProtectionHandler への参照を保持している必要があります。
実装
前に説明したように、mip::FileHandler クラスでは、ラベルと保護情報の両方の読み取り、書き込み、削除を実行するためのメソッドが公開されます。 サポートされている操作の完全な一覧については、 mip::FileHandler のリファレンスを確認してください。
このシナリオでは、mip::FileHandler の次のメソッドを使用します。
GetProtection()CommitAsync()GetDecryptedTemporaryFileAsync()SetProtection()
このシナリオでは、mip::ProtectionHandler も使用します。これにより、保護されたストリームとバッファーの暗号化と暗号化解除、アクセス確認の実行、発行ライセンスの取得、および保護された情報からの属性の取得のための関数が公開されます。
AccessCheck() メソッドは、ユーザーがファイルを編集する権限を持っていることを検証するために使用されます。
この再保護シナリオを正常に完了するには、「次の手順」にあるクイック スタートを確認し、アプリケーションでラベルを構築して、正常に一覧表示できることを確認します。
ファイルから保護ハンドラーを作成し、ファイルの暗号化を解除する
mip::ProtectionHandler では、保護されたストリームとバッファーの暗号化と暗号化解除、アクセス確認の実行、発行ライセンスの取得、および保護された情報からの属性の取得のための関数が公開されます。
mip::ProtectionHandler オブジェクトは、ProtectionDescriptor かシリアル化された発行ライセンスのどちらかを指定することによって構築されます。 このユース ケースでは、公開ライセンスは、既に保護されているコンテンツの暗号化を解除するとき、またはライセンスが既に構築されているコンテンツを保護するときに使用されます。
mip::FileHandlerは、GetProtection()に関連付けられたファイルからmip::ProtectionHandlerを取得する mip::FileHandler という名前のメソッドを公開します。
mip::ProtectionHandler オブジェクトを取得すると、同じものを使用して、ファイルに対するユーザーのアクセス レベルを検証し、ファイルの暗号化を解除し、その後に編集後のファイルを暗号化することができます。
mip::ProtectionHandler の AccessCheck() は、ユーザーがファイルに対して特定の権限を持っていることを検証し、結果に応じてブール値の応答を返すために使用されます。 たとえば、ユーザーが編集権限を持っていることを確認するには、このメソッドを呼び出して、値 "EDIT" を渡します。 結果が true であれば、そのユーザーにファイルの編集を許可します。
EDIT 権限が検証されると、mip::FileHandler の GetDecryptedTemporaryFileAsync() を使用して、一時的に暗号化解除されたファイルを取得できます。
詳細については、「 秘密度ラベルを使用してコンテンツへのアクセスを制限して暗号化を適用する」を参照してください。
重要
アクセスの確認と強制は、アプリケーション開発者の責任です。 表示権限を持つユーザーは、保護された情報の暗号化を解除できます。 ユーザーに付与される権限のセットを検証し、コピー、編集、スクリーンショットの作成などの情報保護コントロールを使用してそれらの権限を適用するのは、アプリケーションの権限です。 保護制御が適切に実装されていないと、機密情報が公開されるおそれがあります。
保護を適用して、編集されたファイルを保存および発行する
ファイルは、ファイルの暗号化が解除された後に編集できます。 編集操作が完了したら、変更内容をコミットできます。 コミットされたファイルを処理するための一時ファイルを使用して、 IFileHandler オブジェクトを作成します。 そのようにすると、この一時ファイルは、元のファイルから取得した IProtectionHandler オブジェクトを使用して保護することができます。