Entwickeln Ihrer Anwendung
Wichtig
Versionen des Microsoft Rights Management Service SDK, das vor März 2020 veröffentlicht wurde, sind veraltet; Anwendungen, die frühere Versionen verwenden, müssen aktualisiert werden, um die Version vom März 2020 zu verwenden. Ausführliche Informationen finden Sie im Hinweis zum Veralteten.
Für das Microsoft Rights Management Service SDK sind keine weiteren Verbesserungen geplant. Wir empfehlen dringend die Einführung des Microsoft Information Protection SDK für Klassifizierung, Bezeichnung und Schutzdienste.
In diesem Beispiel erstellen Sie eine einfache Konsolenanwendung, die mit dem Azure Information Protection-Dienst (AIP) interagiert. Es wird als Eingabe des Pfads eines Dokuments verwendet, um es zu schützen, und dann mit einer Ad-hoc-Richtlinie oder einer Azure-Vorlage schützen. Die Anwendung wendet dann die richtigen Richtlinien gemäß den Eingaben an und erstellt ein geschütztes Informationsdokument. Der beispielcode, den Sie verwenden, ist die Azure IP-Testanwendung und befindet sich auf Github.
Beispiel-App-Voraussetzungen
- Betriebssystem: Windows 10, Windows 8, Windows 7, Windows Server 2008, Windows Server 2008 R2 oder Windows Server 2012
- Programmiersprache: C# (.NET Framework 3.0 und höher)
- Entwicklungsumgebung: Visual Studio 2015 (und höher)
Einrichten Ihrer Azure-Konfiguration
Zum Einrichten von Azure für diese App müssen Sie eine Mandanten-ID, einen symmetrischen Schlüssel und eine Anwendungsprinzipal-ID erstellen.
Azure AD-Mandantenkonfiguration
Befolgen Sie zum Konfigurieren der Azure AD-Umgebung für Azure Information Protection die Anweisungen zum Aktivieren des Schutzdiensts von Azure Information Protection.
Nachdem der Dienst aktiviert wurde, benötigen Sie PowerShell-Komponenten für die nächsten Schritte. Folgen Sie dem Verwalten des Schutzes von Azure Information Protection mithilfe von PowerShell , um dies zu erreichen.
Abrufen Ihrer Mandanten-ID
- Führen Sie als Administrator PowerShell aus.
- Importieren Sie das RMS-Modul:
Import-Module AIPService
- Stellen Sie eine Verbindung mit dem Dienst mit den zugewiesenen Benutzeranmeldeinformationen her:
Connect-AipService –Verbose
- Stellen Sie sicher, dass RMS aktiviert ist:
enable-aipservice
- Rufen Sie Ihre Mandanten-ID ab, indem Sie Folgendes ausführen:
Get-AipServiceConfiguration
Notieren Sie den BPOSId -Wert (Mandanten-ID). Sie wird später benötigt.
Beispielausgabe
- Verbindung mit dem Dienst trennen:
Disconnect-AipServiceService
Erstellen eines Dienstprinzipals
Führen Sie die folgenden Schritte aus, um einen Dienstprinzipal zu erstellen:
Ein Dienstprinzipal ist Anmeldeinformationen, die global für die Zugriffssteuerung konfiguriert sind, die es einem Dienst ermöglichen, sich bei Microsoft Azure AD zu authentifizieren und Informationen mithilfe von Microsoft Azure AD Rights Management zu schützen.
- Als Administrator führen Sie PowerShell aus
- Importieren Sie das Microsoft Azure AD-Modul mithilfe von:
Import-Module MSOnline
- Stellen Sie eine Verbindung mit Ihrem Onlinedienst mit den zugewiesenen Benutzeranmeldeinformationen her:
Connect-MsolService
- Erstellen Sie einen neuen Dienstprinzipal, indem Sie Folgendes ausführen:
New-MsolServicePrincipal
- Geben Sie einen Namen für Ihren Dienstprinzipal an.
Notieren Sie den symmetrischen Schlüssel und die Anwendungsprinzipal-ID für die zukünftige Verwendung.
Beispielausgabe
- Fügen Sie die Anwendungsprinzipal-ID, den symmetrischen Schlüssel und die Mandanten-ID zur Datei "App.config" der Anwendung hinzu.
Beispieldatei "App.config"
- Die ClientID und RedirectUri stehen Ihnen zur Verfügung, wenn Sie Ihre Anwendung in Azure registriert haben. Weitere Informationen zum Registrieren Ihrer Anwendung in Azure und zum Erwerben einer ClientID und Umleitungsuri finden Sie unter Konfigurieren von Azure RMS für ADAL-Authentifizierung.
Entwurfszusammenfassung
Das folgende Diagramm zeigt einen Architektur- und Prozessfluss für die App, die Sie erstellen, die nachstehend beschriebenen Schritte.
- Die Benutzereingaben:
- Der Pfad der zu schützenden Datei
- Wählt eine Vorlage aus oder erstellt eine Ad-hoc-Richtlinie
- Die Anwendung fordert die Authentifizierung mit AIP an.
- AIP bestätigt die Authentifizierung
- Die Anwendung fordert Vorlagen aus dem AIP an.
- AIP gibt vordefinierte Vorlagen zurück.
- Die Anwendung sucht die angegebene Datei mit dem angegebenen Speicherort.
- Die Anwendung wendet die AIP-Schutzrichtlinie auf die Datei an.
Funktionsweise des Codes
Im Beispiel, Azure IP Test, beginnt die Lösung mit der Datei Iprotect.cs. Dies ist eine C#-Konsolenanwendung, und wie bei jeder anderen AIP-aktivierten Anwendung beginnen Sie mit dem Laden der MSIPC.dll , wie in der main()
Methode gezeigt.
//Loads MSIPC.dll
SafeNativeMethods.IpcInitialize();
SafeNativeMethods.IpcSetAPIMode(APIMode.Server);
Laden der Parameter, die zum Herstellen einer Verbindung mit Azure erforderlich sind
//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"];
Wenn Sie den Dateipfad in der Konsolenanwendung angeben, überprüft die Anwendung, ob das Dokument bereits verschlüsselt ist. Die Methode ist der SafeFileApiNativeMethods-Klasse .
var checkEncryptionStatus = SafeFileApiNativeMethods.IpcfIsFileEncrypted(filePath);
Wenn das Dokument nicht verschlüsselt ist, wird das Dokument mit der auf der Eingabeaufforderung angegebenen Auswahl verschlüsselt.
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);
}
}
Der Schutz mit der Vorlagenoption wird fortgesetzt, um die Vorlagenliste vom Server abzurufen und dem Benutzer die Option zum Auswählen zur Verfügung zu stellen.
Wenn Sie keine Vorlagen geändert haben, erhalten Sie Standardvorlagen von 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);
}
}
}
Wenn Sie ad-hoc-Richtlinie auswählen, muss der Benutzer der Anwendung E-Mails der Personen bereitstellen, die Rechte haben. In diesem Abschnitt wird die Lizenz mithilfe der IpcCreateLicenseFromScratch()- Methode erstellt und die neue Richtlinie auf die Vorlage angewendet.
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);
}
}
Beispiel für Benutzerinteraktion
Sobald Sie alles erstellt und ausgeführt haben, sollten die Ausgaben der Anwendung wie folgt aussehen:
Sie werden aufgefordert, eine Verschlüsselungsmethode auszuwählen.
Sie werden aufgefordert, den Pfad der zu schützenden Datei anzugeben.
Sie werden aufgefordert, die E-Mail-Adresse eines Lizenzbesitzers einzugeben (dieser Besitzer muss über globale Administratorrechte für den Azure AD-Mandanten verfügen).
Sie geben E-Mail-Adressen von Benutzern ein, die berechtigt sind, auf die Datei zuzugreifen (E-Mails müssen durch Leerzeichen getrennt werden).
Sie wählen aus einer Liste der Rechte aus, die den autorisierten Benutzern erteilt werden sollen.
Schließlich geben Sie einige Richtlinienmetadaten ein: Richtlinienname, Beschreibung und Aussteller (Azure AD-Mandant) Anzeigename