Udostępnij za pośrednictwem


Tworzenie aplikacji

Ważne

Wersje zestawu Microsoft Rights Management Service SDK wydane przed marcem 2020 r. są przestarzałe; aby można było korzystać z wersji z marca 2020 r., należy zaktualizować aplikacje korzystające z wcześniejszych wersji. Aby uzyskać szczegółowe informacje, zobacz powiadomienie o wycofaniu.

Nie planuje się dalszych ulepszeń zestawu SDK usługi Microsoft Rights Management. Zdecydowanie zalecamy wdrożenie zestawu MICROSOFT Information Protection SDK na potrzeby klasyfikacji, etykietowania i usług ochrony.

W tym przykładzie utworzysz prostą aplikację konsolową, która współdziała z usługą Azure Information Protection (AIP). Będzie on pobierać jako dane wejściowe ścieżki dokumentu do ochrony, a następnie chronić go za pomocą zasad ad hoc lub szablonu platformy Azure. Następnie aplikacja zastosuje odpowiednie zasady zgodnie z danymi wejściowymi, tworząc dokument chroniony przez informacje. Przykładowy kod, którego będziesz używać, to aplikacja testowa adresu IP platformy Azure i znajduje się w witrynie GitHub.

Przykładowe wymagania wstępne aplikacji

  • System operacyjny: Windows 10, Windows 8, Windows 7, Windows Server 2008, Windows Server 2008 R2 lub Windows Server 2012
  • Język programowania: C# (.NET Framework 3.0 i nowsze)
  • Środowisko programistyczne: Visual Studio 2015 (i nowsze)

Konfigurowanie konfiguracji platformy Azure

Skonfigurowanie platformy Azure dla tej aplikacji wymaga utworzenia identyfikatora dzierżawy, klucza symetrycznego i identyfikatora jednostki aplikacji.

Konfiguracja dzierżawy usługi Azure AD

Aby skonfigurować środowisko usługi Azure AD dla usługi Azure Information Protection, postępuj zgodnie ze wskazówkami w temacie Aktywacja usługi ochrony z usługi Azure Information Protection.

Po aktywowaniu usługi potrzebne będą składniki programu PowerShell do wykonania następnych kroków. Aby to osiągnąć, postępuj zgodnie z instrukcjami administrowania ochroną z usługi Azure Information Protection przy użyciu programu PowerShell .

Pobieranie identyfikatora dzierżawy

  • Jako administrator uruchom program PowerShell.
  • Zaimportuj moduł RMS: Import-Module AIPService
  • Połącz się z usługą przy użyciu przypisanych poświadczeń użytkownika: Connect-AipService –Verbose
  • Upewnij się, że usługa RMS jest włączona: enable-aipservice
  • Pobierz identyfikator dzierżawy, uruchamiając polecenie: Get-AipServiceConfiguration

Zarejestruj wartość BPOSId (identyfikator dzierżawy). Będą one potrzebne w przyszłych krokach.

Przykładowe dane wyjścioweDane wyjściowe polecenia cmdlet Get-AadrmConfiguration

  • Odłącz się od usługi: Disconnect-AipServiceService

Tworzenie jednostki usługi

Wykonaj następujące kroki, aby utworzyć jednostkę usługi:

Jednostka usługi to poświadczenia skonfigurowane globalnie do kontroli dostępu, które umożliwiają usłudze uwierzytelnianie w usłudze Microsoft Azure AD i ochronę informacji przy użyciu usługi Microsoft Azure AD Rights Management

  • Jako administrator uruchom program PowerShell
  • Zaimportuj moduł usługi Microsoft Azure AD przy użyciu: Import-Module MSOnline
  • Połącz się z usługą online przy użyciu przypisanych poświadczeń użytkownika: Connect-MsolService
  • Utwórz nową jednostkę usługi, uruchamiając polecenie: New-MsolServicePrincipal
  • Podaj nazwę jednostki usługi

    Zarejestruj klucz symetryczny i identyfikator podmiotu zabezpieczeń aplikacji do użycia w przyszłości.

Przykładowe dane wyjścioweDane wyjściowe polecenia cmdlet NewMsolServicePrincipal

  • Dodaj identyfikator jednostki aplikacji, klucz symetryczny i identyfikator dzierżawy do pliku App.config aplikacji.

Przykładowy plik App.configPrzykładowy plik App.config

Podsumowanie projektu

Na poniższym diagramie przedstawiono architekturę i przepływ procesów dla tworzonej aplikacji, kroki opisane poniżej. podsumowanie projektu

  1. Dane wejściowe użytkownika:
    • Ścieżka pliku do ochrony
    • Wybiera szablon lub tworzy zasady ad hoc
  2. Aplikacja żąda uwierzytelniania za pomocą usługi AIP.
  3. AIP potwierdza uwierzytelnianie
  4. Aplikacja żąda szablonów z usługi AIP.
  5. Funkcja AIP zwraca wstępnie zdefiniowane szablony.
  6. Aplikacja lokalizuje określony plik z daną lokalizacją.
  7. Aplikacja stosuje zasady ochrony usługi AIP do pliku.

Jak działa kod

W przykładzie test adresu IP platformy Azure rozwiązanie zaczyna się od pliku Iprotect.cs. Jest to aplikacja konsolowa języka C#, podobnie jak w przypadku każdej innej aplikacji z obsługą usługi AIP, rozpoczynasz ładowanie MSIPC.dll , jak pokazano w metodzie main() .

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

Ładowanie parametrów wymaganych do nawiązania połączenia z platformą Azure

//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"];

Po podaniu ścieżki pliku w aplikacji konsolowej aplikacja sprawdza, czy dokument jest już zaszyfrowany. Metoda jest klasy SafeFileApiNativeMethods .

var checkEncryptionStatus = SafeFileApiNativeMethods.IpcfIsFileEncrypted(filePath);

Jeśli dokument nie jest zaszyfrowany, oznacza to, że dokument zostanie zaszyfrowany przy użyciu zaznaczenia podanego w wierszu polecenia.

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);
  }
}

Opcja Chroń za pomocą szablonu jest kontynuowana w celu pobrania listy szablonów z serwera i udostępnia użytkownikowi opcję wyboru.

Jeśli szablony nie zostały zmodyfikowane, uzyskasz szablony domyślne z usługi AIP

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);
    }
  }
}

W przypadku wybrania zasad ad hoc użytkownik aplikacji musi podać wiadomości e-mail osób, które miałyby prawa. W tej sekcji licencja jest tworzona przy użyciu metody IpcCreateLicenseFromScratch() i stosowania nowych zasad w szablonie.

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);
    }
}

Przykład interakcji z użytkownikiem

Po utworzeniu i wykonaniu wszystkich operacji dane wyjściowe aplikacji powinny wyglądać następująco:

  1. Zostanie wyświetlony monit o wybranie metody szyfrowania. dane wyjściowe aplikacji — krok 1

  2. Zostanie wyświetlony monit o podanie ścieżki do pliku, który ma być chroniony. dane wyjściowe aplikacji — krok 2

  3. Zostanie wyświetlony monit o wprowadzenie adresu e-mail właściciela licencji (ten właściciel musi mieć uprawnienia administratora globalnego w dzierżawie usługi Azure AD). dane wyjściowe aplikacji — krok 3

  4. Wprowadź adresy e-mail użytkowników, którzy będą mieli prawa dostępu do pliku (wiadomości e-mail muszą być oddzielone spacjami). dane wyjściowe aplikacji — krok 4

  5. Możesz wybrać z listy praw do nadania autoryzowanym użytkownikom. dane wyjściowe aplikacji — krok 5

  6. Na koniec wprowadź metadane zasad: nazwę zasad, opis i nazwę wyświetlaną wystawcy (dzierżawa usługi Azure AD) dane wyjściowe aplikacji — krok 6