Dela via


Utveckla ditt program

Viktigt!

Versioner av Microsoft Rights Management Service SDK som släpptes före mars 2020 är inaktuella. program som använder tidigare versioner måste uppdateras för att använda versionen mars 2020. Fullständig information finns i utfasningsmeddelandet.

Inga ytterligare förbättringar planeras för Microsoft Rights Management Service SDK. Vi rekommenderar starkt att du använder Microsoft Information Protection SDK för klassificering, etikettering och skyddstjänster.

I det här exemplet ska du skapa ett enkelt konsolprogram som interagerar med Azure Information Protection-tjänsten (AIP). Det tar som indata sökvägen till ett dokument att skydda och sedan skydda det med en ad hoc-princip eller en Azure-mall. Programmet tillämpar sedan rätt principer enligt indata och skapar ett informationsskyddat dokument. Exempelkoden som du ska använda är Azure IP-testprogrammet och finns på Github.

Krav för exempelapp

  • Operativsystem: Windows 10, Windows 8, Windows 7, Windows Server 2008, Windows Server 2008 R2 eller Windows Server 2012
  • Programmeringsspråk: C# (.NET Framework 3.0 och senare)
  • Utvecklingsmiljö: Visual Studio 2015 (och senare)

Konfigurera din Azure-konfiguration

För att konfigurera Azure för den här appen måste du skapa ett klient-ID, en symmetrisk nyckel och ett programhuvudnamns-ID.

Konfiguration av Azure AD-klientorganisation

Om du vill konfigurera Azure AD-miljön för Azure Information Protection följer du riktlinjerna i Aktivera skyddstjänsten från Azure Information Protection.

När tjänsten har aktiverats behöver du PowerShell-komponenter för nästa steg. Följ Administrera skydd från Azure Information Protection med hjälp av PowerShell för att göra detta.

Hämta ditt klientorganisations-ID

  • Som administratör kör du PowerShell.
  • Importera RMS-modulen: Import-Module AIPService
  • Anslut till tjänsten med de tilldelade användarautentiseringsuppgifterna: Connect-AipService –Verbose
  • Kontrollera att RMS är aktiverat: enable-aipservice
  • Hämta ditt klientorganisations-ID genom att köra: Get-AipServiceConfiguration

Registrera värdet för BPOSId (klientorganisations-ID). Du behöver det i framtida steg.

Exempel på utdataGet-AadrmConfiguration-cmdlet-utdata

  • Koppla från tjänsten: Disconnect-AipServiceService

Skapa ett huvudnamn för tjänsten

Följ dessa steg för att skapa ett huvudnamn för tjänsten:

Tjänstens huvudnamn är autentiseringsuppgifter som konfigurerats globalt för åtkomstkontroll som gör att en tjänst kan autentisera med Microsoft Azure AD och skydda information med hjälp av Microsoft Azure AD Rights Management

  • Som administratör kör du PowerShell
  • Importera Microsoft Azure AD-modulen med: Import-Module MSOnline
  • Anslut till onlinetjänsten med de tilldelade användarautentiseringsuppgifterna: Connect-MsolService
  • Skapa ett nytt huvudnamn för tjänsten genom att köra: New-MsolServicePrincipal
  • Ange ett namn för tjänstens huvudnamn

    Registrera den symmetriska nyckeln och programhuvudnamns-ID:t för framtida användning.

Exempel på utdataNewMsolServicePrincipal-cmdlet-utdata

  • Lägg till ditt programhuvudnamns-ID, symmetrisk nyckel och klient-ID i programmets App.config-fil.

Exempelfil för App.configExempelfil för App.config

  • ClientID och RedirectUri kommer att vara tillgängliga för dig från när du registrerade ditt program i Azure. Mer information om hur du registrerar ditt program i Azure och hur du hämtar ett ClientID och RedirectUri finns i Konfigurera Azure RMS för ADAL-autentisering.

Designsammanfattning

Följande diagram visar en arkitektur och ett processflöde för appen som du skapar, steg som beskrivs nedan. designsammanfattning

  1. Användarens indata:
    • Sökvägen till filen som ska skyddas
    • Väljer en mall eller skapar en ad hoc-princip
  2. Programmet begär autentisering med AIP.
  3. AIP bekräftar autentisering
  4. Programmet begär mallar från AIP.
  5. AIP returnerar fördefinierade mallar.
  6. Programmet letar upp den angivna filen med angiven plats.
  7. Programmet tillämpar AIP-skyddsprincipen på filen.

Så här fungerar koden

I exemplet Azure IP Test börjar lösningen med filen Iprotect.cs. Det här är ett C#-konsolprogram och precis som med andra AIP-aktiverade program börjar du med att läsa in MSIPC.dll enligt main() metoden.

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

Läs in de parametrar som behövs för att ansluta till 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"];

När du anger filsökvägen i konsolprogrammet kontrollerar programmet om dokumentet redan är krypterat. Metoden är av klassen SafeFileApiNativeMethods .

var checkEncryptionStatus = SafeFileApiNativeMethods.IpcfIsFileEncrypted(filePath);

Om dokumentet inte är krypterat fortsätter det att kryptera dokumentet med det val som anges i prompten.

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

Alternativet Skydda med mall fortsätter för att hämta malllistan från servern och ger användaren möjlighet att välja.

Om du inte har modifierat mallar får du standardmallar från 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);
    }
  }
}

Om du väljer ad hoc-princip måste användaren av programmet ange e-postmeddelanden för de personer som skulle ha rättigheter. I det här avsnittet skapas licensen med hjälp av metoden IpcCreateLicenseFromScratch() och tillämpar den nya principen på mallen.

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

Exempel på användarinteraktion

När du har skapat och kört allt bör programmets utdata se ut så här:

  1. Du uppmanas att välja en krypteringsmetod. apputdata – steg 1

  2. Du uppmanas att ange sökvägen till filen som ska skyddas. apputdata – steg 2

  3. Du uppmanas att ange en licensägares e-post (den här ägaren måste ha global administratörsbehörighet för Azure AD-klientorganisationen). apputdata – steg 3

  4. Du anger e-postadresser till användare som har behörighet att komma åt filen (e-postmeddelanden måste avgränsas med blanksteg). apputdata – steg 4

  5. Du väljer från en lista över rättigheter som ska ges till behöriga användare. apputdata – steg 5

  6. Slutligen anger du några principmetadata: principnamn, beskrivning och utfärdare (Azure AD-klient) visningsnamn apputdata – steg 6