再発行 (C++)
概要
この概要では、アプリケーションでユーザーにファイルの編集を許可する必要があるものの、所有者、権限、コンテンツ キーなどに関する元の発行ライセンス情報を保持する必要がある場合に直面する特定のシナリオにおける、MIP SDK での再発行に焦点を当てて説明します。
パターンは次のようになります。
- ユーザーが、保護されたドキュメントを編集用に開きます。
- ユーザーは、適切な権限が付与されている場合にのみ、ファイルの編集を許可される必要があります。
- ユーザーが、ドキュメントを編集して保存します。
このタスクを実行するための MIP SDK 擬似コードは、次のようになります。
- ターゲット ファイルを指す
mip::FileHandler
を作成します。 mip::FileHandler
のGetProtection()
メソッドによって公開されるmip::ProtectionHandler
を保存します。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
は、mip::FileHandler
に関連付けられているファイルから mip::ProtectionHandler
を取得する、GetProtection()
という名前のメソッドを公開します。 mip::ProtectionHandler
オブジェクトを取得すると、同じものを使用して、ファイルに対するユーザーのアクセス レベルを検証し、ファイルの暗号化を解除し、その後に編集後のファイルを暗号化することができます。
mip::ProtectionHandler
の AccessCheck()
は、ユーザーがファイルに対して特定の権限を持っていることを検証し、結果に応じてブール値の応答を返すために使用されます。 たとえば、ユーザーが編集権限を持っていることを確認するには、このメソッドを呼び出して、値 "EDIT" を渡します。 結果が true であれば、そのユーザーにファイルの編集を許可します。 EDIT 権限が検証されると、mip::FileHandler
の GetDecryptedTemporaryFileAsync()
を使用して、一時的に暗号化解除されたファイルを取得できます。
さまざまなユーザー権限の詳細については、Azure Information Protection のユーザー権限に関する記事を参照してください。
重要
アクセスの確認と強制は、アプリケーション開発者の責任です。 表示権限を持つユーザーは、保護された情報の暗号化を解除できます。 ユーザーに許可される権限のセットを検証し、コピー、編集、スクリーンショット作成の防止などの情報保護コントロールを使用してそれらの権限を強制することは、アプリケーションで行う必要があります。 保護制御が適切に実装されていないと、機密情報が公開されるおそれがあります。
保護を適用して、編集されたファイルを保存および発行する
ファイルは、暗号化を解除すると編集できるようになります。 編集操作が完了したら、変更内容をコミットできます。 上の一時ファイルを使用してコミットされたファイルを処理するための IFileHandler
オブジェクトを作成します。 そのようにすると、この一時ファイルは、元のファイルから取得した IProtectionHandler
オブジェクトを使用して保護することができます。