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ściowe
- 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ściowe
- Dodaj identyfikator jednostki aplikacji, klucz symetryczny i identyfikator dzierżawy do pliku App.config aplikacji.
Przykładowy plik App.config
- Identyfikator ClientID i RedirectUri będą dostępne od momentu zarejestrowania aplikacji na platformie Azure. Aby uzyskać więcej informacji na temat rejestrowania aplikacji na platformie Azure i uzyskiwania identyfikatora ClientID i RedirectUri, zobacz Konfigurowanie usługi Azure RMS na potrzeby uwierzytelniania ADAL.
Podsumowanie projektu
Na poniższym diagramie przedstawiono architekturę i przepływ procesów dla tworzonej aplikacji, kroki opisane poniżej.
- Dane wejściowe użytkownika:
- Ścieżka pliku do ochrony
- Wybiera szablon lub tworzy zasady ad hoc
- Aplikacja żąda uwierzytelniania za pomocą usługi AIP.
- AIP potwierdza uwierzytelnianie
- Aplikacja żąda szablonów z usługi AIP.
- Funkcja AIP zwraca wstępnie zdefiniowane szablony.
- Aplikacja lokalizuje określony plik z daną lokalizacją.
- 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:
Zostanie wyświetlony monit o wybranie metody szyfrowania.
Zostanie wyświetlony monit o podanie ścieżki do pliku, który ma być chroniony.
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).
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).
Możesz wybrać z listy praw do nadania autoryzowanym użytkownikom.
Na koniec wprowadź metadane zasad: nazwę zasad, opis i nazwę wyświetlaną wystawcy (dzierżawa usługi Azure AD)