Uygulamanızı geliştirme

Önemli

Mart 2020'den önce yayımlanan Microsoft Rights Management Service SDK sürümleri kullanım dışı bırakılmıştır; önceki sürümleri kullanan uygulamaların Mart 2020 sürümünü kullanacak şekilde güncelleştirilmiş olması gerekir. Tüm ayrıntılar için kullanımdan kaldırma bildirimine bakın.

Microsoft Rights Management Service SDK'sı için başka geliştirme planlanmıyor. Sınıflandırma, etiketleme ve koruma hizmetleri için Microsoft Bilgi Koruması SDK'sının benimsenmesini kesinlikle öneririz.

Bu örnekte, Azure Information Protection hizmetiyle (AIP) etkileşimli çalışan basit bir konsol uygulaması oluşturacaksınız. Bu uygulama, korunacak belgenin yolunu giriş olacak alacak ve ardından geçici bir ilke veya Azure şablonuyla belgeyi koruyacak. Ardından uygulama, girişlere göre doğru ilkeleri uygulayacak ve bilgi korumalı belgeler oluşturacak. Kullanacağınız örnek kod Azure IP test uygulamasıdır ve Github üzerindedir.

Örnek uygulama önkoşulları

  • İşletim Sistemi: Windows 10, Windows 8, Windows 7, Windows Server 2008, Windows Server 2008 R2 veya Windows Server 2012
  • Programlama Dili: C# (.NET Framework 3.0 veya üstü)
  • Geliştirme ortamı: Visual Studio 2015 (veya üstü)

Azure Yapılandırmanızı ayarlama

Azure’u bu uygulamaya göre ayarlamak için bir Kiracı Kimliği, Simetrik Anahtar ve Uygulama Birincil Kimliği oluşturmanız gerekir.

Azure AD Kiracısı yapılandırması

Azure Information Protection için Azure AD ortamını yapılandırmak için Azure Information Protection'dan koruma hizmetini etkinleştirme bölümündeki yönergeleri izleyin.

Hizmet etkinleştirildikten sonra, izleyen adımlar için PowerShell bileşenlerine ihtiyacınız olacak. Bunu gerçekleştirmek için PowerShell kullanarak Azure Information Protection korumasını yönetme'yi izleyin.

Kiracı Kimliğinizi alma

  • PowerShell’i yönetici olarak çalıştırın.
  • RMS modülünü içeri aktarın: Import-Module AIPService
  • Atanan kullanıcı kimlik bilgileriyle hizmete bağlanın: Connect-AipService –Verbose
  • RMS’nin etkinleştirildiğinden emin olun: enable-aipservice
  • Şu komutu çalıştırarak kiracı kimliğinizi alın: Get-AipServiceConfiguration

BPOSId (kiracı kimliği) değerini kaydedin. Bu değer sonraki adımlarda gerekecektir.

Örnek çıkışGet-AadrmConfiguration cmdlet çıkışı

  • Hizmetle bağlantıyı kesin: Disconnect-AipServiceService

Hizmet asıl adı oluşturma

Hizmet Asıl Adı oluşturmak için bu adımları izleyin:

Hizmet asıl adı, erişim denetimi için yapılandırılan, hizmetin Microsoft Azure AD ile kimlik doğrulaması yapmasına ve Microsoft Azure AD Hak Yönetimi’ni kullanarak bilgileri korumasına olanak tanıyan kimlik bilgileridir.

  • PowerShell’i yönetici olarak çalıştırın
  • Şu komutu kullanarak Microsoft Azure AD modülünü içeri aktarın: Import-Module MSOnline
  • Atanan kullanıcı kimlik bilgileriyle çevrimiçi hizmetinize bağlanın: Connect-MsolService
  • Şu komutu kullanarak yeni bir hizmet asıl adı oluşturun: New-MsolServicePrincipal
  • Hizmet asıl adınız için bir ad girin

    Simetrik anahtarı ve uygulama birincil kimliğini gelecekte kullanmak üzere kaydedin.

Örnek çıkışNewMsolServicePrincipal cmdlet çıkışı

  • Uygulama birincil kimliğinizi, simetrik anahtarınızı ve kiracı kimliğinizi uygulamanın App.config dosyasına ekleyin.

Örnek App.config dosyasıÖrnek App.config dosyası

Tasarım özeti

Aşağıdaki diyagramda oluşturduğunuz uygulamanın mimarisi ve süreç akışı gösterilir; adımlar aşağıda açıklanmıştır. tasarım özeti

  1. Kullanıcı girişleri:
    • Korunacak dosyanın yolu
    • Şablon seçer ve geçici bir ilke oluşturur
  2. Uygulama AIP ile kimlik doğrulaması ister.
  3. AIP kimlik doğrulamasını onaylar
  4. Uygulama AIP’den şablonları ister.
  5. AIP önceden tanımlanmış şablonları döndürür.
  6. Uygulama belirtilen dosyayı verili konumda bulur.
  7. Uygulama dosyaya AIP koruma ilkesini uygular.

Kod nasıl çalışır

Azure IP Testi örneğinde, çözüm Iprotect.cs dosyasıyla başlar. Bur bir C# konsol uygulamasıdır ve AIP özellikli diğer tüm uygulamalar gibi main() yönteminde gösterildiği şekilde MSIPC.dll’yi yükleyerek başlarsınız.

//Loads MSIPC.dll
SafeNativeMethods.IpcInitialize();
SafeNativeMethods.IpcSetAPIMode(APIMode.Server);

Azure bağlanmak için gereken parametreleri yükleyin

//Loads credentials for the service principal from App.Config
SymmetricKeyCredential symmetricKeyCred = new SymmetricKeyCredential();
symmetricKeyCred.AppPrincipalId = ConfigurationManager.AppSettings["AppPrincipalId"];
symmetricKeyCred.Base64Key = ConfigurationManager.AppSettings["Base64Key"];
symmetricKeyCred.BposTenantId = ConfigurationManager.AppSettings["BposTenantId"];

Konsol uygulamasında dosya yolunu sağladığınızda, uygulama dosyanın zaten şifrelenmiş olup olmadığını denetler. Yöntem, SafeFileApiNativeMethods sınıfındadır.

var checkEncryptionStatus = SafeFileApiNativeMethods.IpcfIsFileEncrypted(filePath);

Belge şifrelenmemişse, bilgi isteminde sağlanan seçimle belgeyi şifrelemeye devam eder.

if (!checkEncryptionStatus.ToString().ToLower().Contains(alreadyEncrypted))
{
  if (method == EncryptionMethod1)
  {
    //Encrypt a file via AIP template
    ProtectWithTemplate(symmetricKeyCred, filePath);

  }
  else if (method == EncryptionMethod2)
  {
    //Encrypt a file using ad-hoc policy
    ProtectWithAdHocPolicy(symmetricKeyCred, filePath);
  }
}

Şablon seçeneğiyle korumak için sunucudan şablon listesini almaya devam eder ve kullanıcıya belirtilecek seçeneği sağlar.

Şablonlarda değişiklik yapmadıysanız, AIP’den varsayılan şablonları alırsınız

public static void ProtectWithTemplate(SymmetricKeyCredential symmetricKeyCredential, string filePath)
{
  // Gets the available templates for this tenant
  Collection<TemplateInfo> templates = SafeNativeMethods.IpcGetTemplateList(null, false, true,
      false, true, null, null, symmetricKeyCredential);

  //Requests tenant template to use for encryption
  Console.WriteLine("Please select the template you would like to use to encrypt the file.");

  //Outputs templates available for selection
  int counter = 0;
  for (int i = 0; i < templates.Count; i++)
  {
    counter++;
    Console.WriteLine(counter + ". " + templates.ElementAt(i).Name + "\n" +
        templates.ElementAt(i).Description);
  }

  //Parses template selection
  string input = Console.ReadLine();
  int templateSelection;
  bool parseResult = Int32.TryParse(input, out templateSelection);

  //Returns error if no template selection is entered
  if (parseResult)
  {
    //Ensures template value entered is valid
    if (0 < templateSelection && templateSelection <= counter)
    {
      templateSelection -= templateSelection;

      // Encrypts the file using the selected template
      TemplateInfo selectedTemplateInfo = templates.ElementAt(templateSelection);

      string encryptedFilePath = SafeFileApiNativeMethods.IpcfEncryptFile(filePath,
          selectedTemplateInfo.TemplateId,
          SafeFileApiNativeMethods.EncryptFlags.IPCF_EF_FLAG_KEY_NO_PERSIST, true, false, true, null,
          symmetricKeyCredential);
    }
  }
}

Geçici bir ilke seçerseniz, uygulama kullanıcısının haklara sahip olacak kişilerin e-postalarını sağlaması gerekir. Bu bölümde IpcCreateLicenseFromScratch() yöntemi kullanılarak ve şablona yeni ilke uygulanarak lisans oluşturulur.

if (issuerDisplayName.Trim() != "")
{
  // Gets the available issuers of rights policy templates.
  // The available issuers is a list of RMS servers that this user has already contacted.
  try
  {
    Collection<TemplateIssuer> templateIssuers = SafeNativeMethods.IpcGetTemplateIssuerList(
                                                    null,
                                                    true,
                                                    false,
                                                    false, true, null, symmetricKeyCredential);

    // Creates the policy and associates the chosen user rights with it
    SafeInformationProtectionLicenseHandle handle = SafeNativeMethods.IpcCreateLicenseFromScratch(
                                                        templateIssuers.ElementAt(0));
    SafeNativeMethods.IpcSetLicenseOwner(handle, owner);
    SafeNativeMethods.IpcSetLicenseUserRightsList(handle, userRights);
    SafeNativeMethods.IpcSetLicenseDescriptor(handle, new TemplateInfo(null, CultureInfo.CurrentCulture,
                                                            policyName,
                                                            policyDescription,
                                                            issuerDisplayName,
                                                            false));

    //Encrypts the file using the ad hoc policy
    string encryptedFilePath = SafeFileApiNativeMethods.IpcfEncryptFile(
                                    filePath,
                                    handle,
                                    SafeFileApiNativeMethods.EncryptFlags.IPCF_EF_FLAG_KEY_NO_PERSIST,
                                    true,
                                    false,
                                    true,
                                    null,
                                    symmetricKeyCredential);
    }
}

Kullanıcı etkileşimi örneği

Her şeyi oluşturduktan ve yürüttükten sonra, uygulamanın çıkışları aşağıdaki gibi görünmelidir:

  1. Bir şifreleme yöntemi seçmeniz istenir. uygulama çıkışı - 1. adım

  2. Korunacak dosyaların yolunu sağlamanız istenir. uygulama çıkışı - 2. adım

  3. Lisans sahibinin e-postasını girmeniz istenir (bu lisans sahibinin Azure AD Kiracısı üzerinde Genel Yönetici ayrıcalıkları olmalıdır). uygulama çıkışı - 3. adım

  4. Dosyaya erişim haklarına sahip olacak kullanıcıların e-posta adreslerini girersiniz (e-postalar boşluklarla ayrılmalıdır). uygulama çıkışı - 4. adım

  5. Yetkili kullanıcılara verilecek hakları listeden seçersiniz. uygulama çıkışı - 5. adım

  6. Son olarak, bazı ilke meta verilerini girersiniz: ilke adı, açıklama ve veren (Azure AD Kiracı) görünen ad uygulaması çıkışı - 6. adım