快速入门:保护 SDK (C#) 的客户端应用程序初始化

本快速入门将介绍如何实现 MIP SDK .NET 包装器在运行时使用的客户端初始化模式。

注意

本快速入门中概述的步骤对于使用 MIP .NET 包装器的保护 SDK 的任何客户端应用程序都是必需的。 应在身份验证委托和许可委托类的应用程序初始化和实现后完成本快速入门。

先决条件

如果尚未完成,请确保:

创建 Visual Studio 解决方案和项目

首先,创建并配置初始 Visual Studio 解决方案和项目,其他快速入门将以此为基础。

  1. 打开 Visual Studio 2017,依次选择“文件”菜单、“新建”、“项目”。 在“新建项目”对话框中:

    • 在左侧窗格中的“已安装”下的“Visual C#”中,选择“Windows 桌面”。

    • 在中间窗格中,选择“控制台应用(.NET Framework)”

    • 在底部窗格中,对项目“名称”、“位置”和包含的“解决方案名称”进行相应更新。

    • 完成后,单击右下角的“确定”按钮。

      Visual Studio solution creation

  2. 将 MIP 文件 SDK 的 Nuget 包添加到项目:

    • 在“解决方案资源管理器”中,右键单击项目节点(直接在顶部/解决方案节点下方单击),然后选择“管理 NuGet 包...”
    • 当“NuGet 包管理器”选项卡在编辑器组选项卡区域中打开时:
      • 选择浏览
      • 在搜索框中输入“Microsoft.InformationProtection”。
      • 选择“Microsoft.InformationProtection.File”包。
      • 单击“安装”,然后在显示“预览更改”确认对话框时,单击“确定”。
  3. 重复上述步骤以添加 MIP 保护 SDK 包,但改为将“Microsoft.IdentityModel.Clients.ActiveDirectory”添加到应用程序。

如果尚未实现,请按照文件 SDK 应用程序初始化中列出的步骤实现身份验证和许可委托。

初始化 MIP SDK 托管包装器

  1. 从解决方案资源管理器,打开项目中包含 Main() 方法实现的 .cs 文件。 该文件默认与包含它的项目同名,该名称在项目创建期间指定。

  2. 删除生成的 main() 实现。

  3. 托管包装器包括一个静态类 Microsoft.InformationProtection.MIP,用于初始化、创建 MipContext、加载配置文件和释放资源。 若要初始化文件 SDK 操作的包装器,请调用 MIP.Initialize(),传入 MipComponent.Protection 以加载保护操作所需的库。

  4. Program.csMain() 中添加以下内容,将 <application-id> 替换为之前创建的 Microsoft Entra 应用程序注册的 ID。

using System;
using System.Threading.Tasks;
using Microsoft.InformationProtection;
using Microsoft.InformationProtection.Exceptions;
using Microsoft.InformationProtection.Protection;

namespace mip_sdk_dotnet_quickstart
{
    class Program
    {
        private const string clientId = "<application-id>";
        private const string appName = "<friendly-name>";

        static void Main(string[] args)
        {
            //Initialize Wrapper for Protection SDK operations
            MIP.Initialize(MipComponent.Protection);
        }
    }
}

构造保护配置文件和引擎

如前所述,使用 MIP API 的 SDK 客户端需要配置文件和引擎对象。 通过添加代码来加载本机 DLL,然后实例化配置文件和引擎对象,完成本快速入门的编码部分。

using System;
using System.Threading.Tasks;
using Microsoft.InformationProtection;
using Microsoft.InformationProtection.Exceptions;
using Microsoft.InformationProtection.Protection;

namespace mip_sdk_dotnet_quickstart
{
     class Program
     {
          private const string clientId = "<application-id>";
          private const string appName = "<friendly-name>";

          static void Main(string[] args)
          {
               // Initialize Wrapper for Protection SDK operations.
               MIP.Initialize(MipComponent.Protection);

               // Create ApplicationInfo, setting the clientID from Azure AD App Registration as the ApplicationId.
               ApplicationInfo appInfo = new ApplicationInfo()
               {
                    ApplicationId = clientId,
                    ApplicationName = appName,
                    ApplicationVersion = "1.0.0"
               };

               // Instantiate the AuthDelegateImpl object, passing in AppInfo.
               AuthDelegateImplementation authDelegate = new AuthDelegateImplementation(appInfo);

               // Create MipConfiguration Object
               MipConfiguration mipConfiguration = new MipConfiguration(appInfo, "mip_data", LogLevel.Trace, false);

               // Create MipContext using Configuration
               mipContext = MIP.CreateMipContext(mipConfiguration);
                
               // Initialize and instantiate the ProtectionProfile.
               // Create the ProtectionProfileSettings object.
               // Initialize protection profile settings to create/use local state.
               var profileSettings = new ProtectionProfileSettings(mipContext,
                                        CacheStorageType.OnDiskEncrypted,                                        
                                        new ConsentDelegateImplementation());

               // Load the Profile async and wait for the result.
               var protectionProfile = Task.Run(async () => await MIP.LoadProtectionProfileAsync(profileSettings)).Result;

               // Create a ProtectionEngineSettings object, then use that to add an engine to the profile.
               var engineSettings = new ProtectionEngineSettings("user1@tenant.com", authDelegate, "", "en-US");
               engineSettings.Identity = new Identity("user1@tenant.com");
               var protectionEngine = Task.Run(async () => await protectionProfile.AddEngineAsync(engineSettings)).Result;

               // Application Shutdown
               // handler = null; // This will be used in later quick starts.
               protectionEngine = null;
               protectionProfile = null;
               mipContext = null;
          }
     }
}
  1. 使用以下值替换粘贴的源代码中的占位符值:

    占位符 示例
    <application-id> 分配给在“MIP SDK 安装和配置”中注册的应用程序的 Microsoft Entra 应用程序 ID(2 个实例)。 0edbblll-8773-44de-b87c-b8c6276d41eb
    <friendly-name> 应用程序的用户定义的易记名称。 AppInitialization
  2. 现在,对应用程序进行最终生成并解决所有错误。 代码应成功生成。

后续步骤

完成初始化代码后,接下来可以开始学习下一个快速入门,你将开始了解 MIP 保护 SDK。