Quickstart: Openbare en vertrouwelijke clients (C#)

Er worden twee veelvoorkomende scenario's gebruikt bij het bouwen van toepassingen met de MIP SDK. In het eerste scenario verifieert de gebruiker zich rechtstreeks bij Microsoft Entra ID. In de tweede wordt de toepassing geverifieerd met behulp van een app-geheim of certificaat.

Openbare clienttoepassingen

Deze toepassingen zijn desktop- of mobiele toepassingen waarmee de gebruiker wordt gevraagd zich te verifiëren. De gebruiker maakt rechtstreeks verbinding met de BACK-end-MIP-services. In dit scenario moeten verificatiebibliotheken worden gebruikt om ervoor te zorgen dat de gebruiker zich kan aanmelden bij Microsoft Entra ID, voldoet aan alle vereisten voor meervoudige of voorwaardelijke toegang en een OAuth2-token voor de juiste resource verkrijgt.

Zie de documentatie voor de openbare clientverificatiestroom voor meer informatie

Hier is een snel codefragment dat het proces voor openbare clientverificatie voor de Microsoft Information Protection SDK-clienttoepassing demonstreert met behulp van de Microsoft Authentication Library (MSAL).


public string AcquireToken(Identity identity, string authority, string resource, string claims)
{
     var authorityUri = new Uri(authority);
     // 
     authority = String.Format("https://{0}/{1}", authorityUri.Host, "<Tenant-GUID>");

     _app = PublicClientApplicationBuilder.Create("<Application-Id>")
                                          .WithAuthority(authority)
                                          .WithDefaultRedirectUri()
                                          .Build();

     var accounts = (_app.GetAccountsAsync())
                    .GetAwaiter()
                    .GetResult();

     // Append .default to the resource passed in to AcquireToken().     
     string[] scopes = new string[] { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };
     var result = _app.AcquireTokenInteractive(scopes)
                      .WithAccount(accounts.FirstOrDefault())
                      .WithPrompt(Prompt.SelectAccount)
                      .ExecuteAsync()
                      .ConfigureAwait(false)
                      .GetAwaiter()
                      .GetResult();

     return result.AccessToken;
}

Tenant-GUID is de unieke tenant-GUID voor de Microsoft Entra-tenant. De toepassings-id is het toepassings-ID in de registratie van toepassingen in het Microsoft Entra-beheercentrum.

Vertrouwelijke clienttoepassingen

Deze toepassingen zijn cloud- of servicetoepassingen waarbij de gebruiker niet rechtstreeks verbinding maakt met de BACK-end-MIP-services. De service moet bestanden of andere gegevens labelen, beveiligen of ontsleutelen. In dit scenario moet de toepassing een certificaat of toepassingsgeheim opslaan. Deze geheimen worden gebruikt voor authenticatie bij Microsoft Entra ID en gebruiken dat geheim om tokens op te halen voor de back-end MIP-services. Vervolgens kan het delegeringsfuncties van de MIP SDK gebruiken om inhoud namens een gebruiker te beveiligen of te gebruiken.

Voor de integratie van de MIP SDK met servicetoepassingen is het gebruik van de client credentials flow vereist. De Microsoft Authentication Library (MSAL) kan worden gebruikt om dit te implementeren in een patroon dat vergelijkbaar is met wat we zouden zien in een openbare clienttoepassing. In dit artikel wordt kort beschreven hoe u de MIP SDK IAuthDelegate in .NET bijwerkt om verificatie uit te voeren voor servicetoepassingen met behulp van deze stroom. Op het moment van publicatie is er geen versie van MSAL voor C++, maar het is mogelijk om deze stroom te implementeren via directe REST-aanroepen.

Raadpleeg de documentatie over de authenticatiestroom voor vertrouwelijke clients voor meer informatie.

Hier volgt een snel codefragment waarin de vertrouwelijke clientverificatiestroom voor de Microsoft Information Protection SDK-clienttoepassing wordt gedemonstreerd met behulp van Microsoft Authentication Library (MSAL). Een toepassing kan worden geverifieerd met behulp van het AD-certificaat of clientgeheim.

Opmerking

Let op deze regel in het volgende voorbeeld.

string[] scopes = new string[] { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };

Hiermee worden de MSAL-bereiken samengesteld van de resource die is opgegeven voor de AcquireToken() methode.

MSAL Confidential Client-voorbeeld

public string AcquireToken(Identity identity, string authority, string resource, string claim)
{
     AuthenticationResult result;
     var authorityUri = new Uri(authority);
     authority = string.Format("https://{0}/{1}", authorityUri.Host, "<Tenant-GUID>");

     // Certification Based Auth
     if (doCertAuth)
     {
          // Build ConfidentialClientApplication using certificate.
          _app = ConfidentialClientApplicationBuilder.Create("<Application-Id>")
               .WithCertificate(certificate) //Assumption here is Application passes a certificate created using certificate thumbprint
               .WithAuthority(new Uri(authority))
               .Build();
     }

     // Client secret based Auth
     else
     {
          // Build ConfidentialClientApplication using app secret
          _app = ConfidentialClientApplicationBuilder.Create("<Application-Id>")
               .WithClientSecret(clientSecret)
               .WithAuthority(new Uri(authority))
               .Build();
     }

     // Append .default to the resource passed in to AcquireToken().
     string[] scopes = new string[] { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };

     try{
          result = _app.AcquireTokenForClient(scopes).ExecuteAsync().Result;
     }
     catch (MsalServiceException ex) when (ex.Message.Contains("AADSTS70011"))
     {
          // Invalid scope. The scope has to be of the form "https://resourceurl/.default"
          // Mitigation: change the scope to be as expected
          Console.WriteLine("Scope provided is not supported");
          return null;
     }
            return result.AccessToken;
}

Tenant-GUID is de unieke tenant-GUID voor de Microsoft Entra-tenant. De toepassings-id is het toepassings-ID in de registratie van toepassingen in het Microsoft Entra-beheercentrum.