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 contra el ID de Microsoft Entra. En el segundo, la aplicación se autentica mediante un secreto de aplicación o un certificado.

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 de back-end. En este escenario, las bibliotecas de autenticación deben usarse para asegurarse de que el usuario puede iniciar sesión en el identificador de Microsoft Entra, cumple los requisitos de acceso condicional o multifactor y obtiene un token de OAuth2 para el recurso adecuado.

Para más información, consulte la documentación del flujo de autenticación de cliente público.

A continuación se muestra un snip 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 identificador de aplicación en el registro de aplicaciones en el Centro de administración de Microsoft Entra.

Aplicaciones cliente confidenciales

Estas aplicaciones son aplicaciones basadas en la nube o en el servicio en las que el usuario no se conecta directamente a los servicios MIP de 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 implementarlo 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 SDK IAuthDelegate 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, consulte la documentación del flujo de autenticación de cliente confidencial.

A continuación se muestra un snip 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 autenticarse mediante el certificado de AD o el secreto de cliente.

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 identificador de aplicación en el registro de aplicaciones en el Centro de administración de Microsoft Entra.