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

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

Aplicaciones cliente públicas

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

Para obtener más información, vea 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 Microsoft Information Protection de cliente SDK con 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 Azure AD inquilino. Id. de aplicación es el id. de la aplicación en el registro de la aplicación en Azure AD portal.

Aplicaciones cliente confidenciales

Estas aplicaciones son aplicaciones basadas en servicios o en la nube en las que el usuario no se conecta directamente a los servicios miP back-end. El servicio tiene la 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 Azure AD y usar ese secreto para capturar tokens para los servicios miP back-end. A continuación, 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 esto en un patrón similar a lo que veríamos en una aplicación cliente pública. En este artículo se explica brevemente cómo actualizar el SDK de MIP en .NET para realizar la autenticación para aplicaciones basadas en servicios IAuthDelegate con 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 de REST directas.

Para obtener más información, vea la documentación de 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 Microsoft Information Protection de cliente SDK con la Biblioteca de autenticación de Microsoft(MSAL). Una aplicación puede autenticarse con el certificado 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 crea los ámbitos MSAL a partir del recurso proporcionado al AcquireToken() método.

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 Azure AD inquilino. Id. de aplicación es el id. de la aplicación en el registro de la aplicación en Azure AD portal.