Inicio rápido: Clientes públicos y confidenciales (C#)

Hay dos escenarios comunes que se usan al compilar aplicaciones con el SDK de MIP. En el primer escenario, el usuario se autentica directamente en Microsoft Entra ID. En el segundo, la aplicación se autentica mediante un secreto o certificado de aplicación.

Aplicaciones cliente públicas

Estas aplicaciones son aplicaciones móviles o de escritorio que pedirán al usuario que se autentique. El usuario se conecta directamente a los servicios MIP del back-end. En este escenario, deben usarse bibliotecas de autenticación para asegurarnos de que el usuario puede iniciar sesión en Microsoft Entra ID, cumple los requisitos de acceso condicional o multifactor y obtiene un token de OAuth2 para el recurso adecuado.

Para más información, vea la documentación del flujo de autenticación de clientes públicos.

A continuación se muestra un fragmento de código rápido que muestra el flujo de autenticación de cliente público para la aplicación cliente del SDK de Microsoft Information Protection mediante la Biblioteca de autenticación de Microsoft (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 es el GUID de inquilino único para el inquilino de Microsoft Entra. Application-ID es el id. de aplicación del registro de aplicación en el centro de administración de Microsoft Entra.

Aplicaciones cliente confidenciales

Estas aplicaciones son aplicaciones basadas en la nube o en un servicio en las que el usuario no se conecta directamente a los servicios MIP del back-end. El servicio tiene una necesidad de etiquetar, proteger o descifrar archivos u otros datos. En este escenario, la aplicación debe almacenar un certificado o un secreto de aplicación. Estos secretos se usarán para la autenticación en Microsoft Entra ID y para capturar tokens para los servicios MIP del back-end. Después, puede usar las características de delegación del SDK de MIP para proteger o consumir contenido en nombre de un usuario.

La integración del SDK de MIP con aplicaciones basadas en servicios requiere el uso del flujo de concesión de credenciales de cliente. La Biblioteca de autenticación de Microsoft (MSAL) se puede usar para implementar este flujo en un patrón similar al que veríamos en una aplicación cliente pública. En este artículo se explica brevemente cómo actualizar el objeto IAuthDelegate del SDK de MIP en .NET para realizar la autenticación de aplicaciones basadas en servicios mediante este flujo. En el momento de la publicación, no hay ninguna versión de MSAL para C++, pero es posible implementar este flujo a través de llamadas REST directas.

Para más información, vea la documentación del flujo de autenticación de clientes confidenciales.

A continuación se muestra un fragmento de código rápido que muestra el flujo de autenticación de cliente confidencial para la aplicación cliente del SDK de Microsoft Information Protection mediante la Biblioteca de autenticación de Microsoft (MSAL). Una aplicación puede autenticar usando un secreto de cliente o un certificado AD.

Nota:

Preste especial atención a esta línea en el ejemplo siguiente.

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

Esto construye los ámbitos de MSAL desde el recurso proporcionado al método AcquireToken().

Ejemplo de cliente confidencial de 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 es el GUID de inquilino único para el inquilino de Microsoft Entra. Application-ID es el id. de aplicación del registro de aplicación en el centro de administración de Microsoft Entra.