Guida introduttiva: client pubblici e riservati (C#)Quickstart: Public and Confidential Clients (C#)

Esistono due scenari comuni usati per la compilazione di applicazioni con l'SDK MIP.There are two common scenarios used when building applications with the MIP SDK. Il primo scenario rileva che l'utente esegue l'autenticazione direttamente rispetto a Azure AD.The first scenario sees the user directly authenticating against Azure AD. Nel secondo, l'applicazione esegue l'autenticazione usando un certificato o una chiave dell'entità servizio segreta.In the second, the application authenticates using a secret service principal key or certificate.

Applicazioni client pubblichePublic Client Applications

Queste applicazioni sono applicazioni desktop o per dispositivi mobili in cui l'applicazione in esecuzione nel dispositivo richiederà all'utente di eseguire l'autenticazione.These applications are desktop or mobile applications in which the application running on the device will prompt the user to authenticate. L'utente si connette direttamente ai servizi MIP di back-end.The user connects directly to the backend MIP services. In questo scenario, le librerie di autenticazione devono essere usate per assicurarsi che l'utente possa accedere a Azure AD, che soddisfi tutti i requisiti di accesso condizionale o a più fattori e ottenga un token OAuth2 per la risorsa appropriata.In this scenario, auth libraries should be used to ensure the user can sign in to Azure AD, meets any multi-factor or conditional access requirements, and obtains an OAuth2 token for the appropriate resource.

Per ulteriori informazioni, vedere la documentazione relativa al flusso di autenticazione client pubblicoFor more information, see the public client auth flow documentation

Di seguito è riportato un rapido codice snip che illustra il flusso di autenticazione client pubblico per l'applicazione client Microsoft Information Protection SDK utilizzando Microsoft Authentication Library (MSAL).The following is a quick code snip demonstrating public client authentication flow for Microsoft Information Protection SDK client application using 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 è il GUID univoco del tenant per il tenant Azure ad.Tenant-GUID is the unique tenant GUID for the Azure AD tenant. Application-ID è l'ID applicazione nella registrazione dell'applicazione nel portale di Azure ad.Application-ID is the application ID in application registration on Azure AD portal.

Applicazioni client riservateConfidential Client Applications

Queste applicazioni sono applicazioni basate su cloud o sui servizi in cui l'utente non si connette direttamente ai servizi MIP di back-end.These applications are cloud or service-based applications where the user isn't directly connecting to the backend MIP services. Il servizio ha la necessità di etichettare, proteggere o rimuovere la protezione del contenuto abilitato per MIP.The service has a need to label, protect, or unprotect MIP-enabled content. In questo scenario, l'applicazione deve archiviare un certificato o un segreto dell'applicazione.In this scenario, the application must store a certificate or application secret. Questi segreti verranno usati per l'autenticazione Azure AD e useranno il segreto per recuperare i token per i servizi MIP di back-end.These secrets will be used for authentication to Azure AD and use that secret to fetch tokens for the backend MIP services. Il licenziatario potrà quindi utilizzare le funzionalità di delega dell'SDK MIP per proteggere o utilizzare il contenuto per conto dell'utente autenticato.It may then use the MIP SDK’s delegation features to protect or consume content on behalf of the authenticated user.

L'integrazione di MIP SDK con le applicazioni basate su servizi richiede l'uso del flusso di concessione delle credenziali client.Integrating the MIP SDK with service-based applications requires use of the client credential grant flow. Microsoft Authentication Library (MSAL) può essere usato per implementarlo in un modello simile a quello che verrebbe visualizzato in un'applicazione client pubblica.The Microsoft Authentication Library (MSAL) can be used to implement this in a pattern similar to what we would see in a public client application. Questo articolo illustra brevemente come aggiornare il MIP SDK IAuthDelegate in .NET per eseguire l'autenticazione per le applicazioni basate su servizi che usano questo flusso.This article will briefly cover how to update the MIP SDK IAuthDelegate in .NET to perform authentication for service-based applications using this flow. Al momento della pubblicazione non è disponibile una versione di MSAL per C++, tuttavia è possibile implementare questo flusso tramite chiamate REST dirette.At the time of publication, there's no version of MSAL for C++, however it's possible to implement this flow via direct REST calls.

Per ulteriori informazioni, vedere la documentazione relativa al flusso di autenticazione client riservataFor more information see the confidential client auth flow documentation

Di seguito è riportato un rapido codice snip che illustra il flusso di autenticazione client riservato per l'applicazione client Microsoft Information Protection SDK utilizzando Microsoft Authentication Library (MSAL).The following is a quick code snip demonstrating confidential client authentication flow for Microsoft Information Protection SDK client application using Microsoft Authentication Library(MSAL). Un'applicazione può eseguire l'autenticazione usando il certificato di Active Directory o il segreto client.An application can authenticate using either the AD certificate or client secret.

Nota

Prestare particolare attenzione a questa riga nell'esempio seguente.Pay special attention to this line in the following sample.

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

Questo costrutti gli ambiti MSAL dalla risorsa fornita al AcquireToken() metodo.This constructs the MSAL scopes from the resource provided to the AcquireToken() method.

Esempio di client riservato MSALMSAL Confidential Client Example

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 è il GUID univoco del tenant per il tenant Azure ad.Tenant-GUID is the unique tenant GUID for the Azure AD tenant. Application-ID è l'ID applicazione nella registrazione dell'applicazione nel portale di Azure ad.Application-ID is the application ID in application registration on Azure AD portal.