Guida introduttiva: Client pubblici e riservati (C#)

Esistono due scenari comuni usati per la compilazione di applicazioni con MIP SDK. Nel primo scenario, l'utente esegue direttamente l'autenticazione con Microsoft Entra ID. Nel secondo, l'applicazione esegue l'autenticazione usando un segreto o un certificato dell'app.

Applicazioni client pubbliche

Queste applicazioni sono applicazioni desktop o per dispositivi mobili che richiederanno all'utente di eseguire l'autenticazione. L'utente si connette direttamente ai servizi MIP back-end. In questo scenario, le librerie di autenticazione devono essere usate per garantire che l'utente possa accedere all'ID Microsoft Entra, soddisfi i requisiti di accesso condizionale o a più fattori e ottiene un token OAuth2 per la risorsa appropriata.

Per altre informazioni, vedere la documentazione del flusso di autenticazione client pubblico

Di seguito è riportato un rapido snip del codice che illustra il flusso di autenticazione client pubblica per l'applicazione client Microsoft Information Protection SDK usando 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 tenant univoco per il tenant di Microsoft Entra. Application-ID è l'ID applicazione nella registrazione dell'applicazione nell'interfaccia di amministrazione di Microsoft Entra.

Applicazioni client riservate

Queste applicazioni sono applicazioni basate sul cloud o sul servizio in cui l'utente non si connette direttamente ai servizi MIP back-end. Il servizio deve etichettare, proteggere o decrittografare file o altri dati. In questo scenario, l'applicazione deve archiviare un certificato o un segreto dell'applicazione. Questi segreti verranno usati per l'autenticazione in Microsoft Entra ID e useranno tale segreto per recuperare i token per i servizi MIP back-end. Può quindi usare le funzionalità di delega di MIP SDK per proteggere o utilizzare il contenuto per conto di un utente.

L'integrazione di MIP SDK con applicazioni basate sul servizio richiede l'uso del flusso di concessione delle credenziali client. Microsoft Authentication Library (MSAL) può essere usato per implementare questa funzionalità in un modello simile a quello visualizzato in un'applicazione client pubblica. Questo articolo illustra brevemente come aggiornare MIP SDK IAuthDelegate in .NET per eseguire l'autenticazione per le applicazioni basate su servizi usando questo flusso. Al momento della pubblicazione non è disponibile alcuna versione di MSAL per C++, ma è possibile implementare questo flusso tramite chiamate REST dirette.

Per altre informazioni, vedere la documentazione del flusso di autenticazione client riservato

Di seguito è riportato un rapido snip del codice che illustra il flusso di autenticazione client riservato per l'applicazione client Microsoft Information Protection SDK usando Microsoft Authentication Library(MSAL). Un'applicazione può eseguire l'autenticazione usando il certificato di Active Directory o il segreto client.

Nota

Prestare particolare attenzione a questa riga nell'esempio seguente.

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

In questo modo vengono costrutti gli ambiti MSAL dalla risorsa fornita al AcquireToken() metodo .

Esempio di client riservato MSAL

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 tenant univoco per il tenant di Microsoft Entra. Application-ID è l'ID applicazione nella registrazione dell'applicazione nell'interfaccia di amministrazione di Microsoft Entra.