Compartir vía


Uso de las API habilitadas para la evaluación continua de acceso en las aplicaciones

La evaluación continua de acceso (CAE) es una característica de Microsoft Entra que permite revocar los tokens de acceso en función de eventos críticos y la evaluación de directivas en lugar de depender de la expiración del token en función de la duración.

Dado que el riesgo y la directiva se evalúan en tiempo real, algunas API de recursos pueden aumentar hasta 28 horas. Estos tokens de larga duración se actualizan de manera proactiva mediante la biblioteca de autenticación de Microsoft (MSAL), lo que aumenta la resistencia de las aplicaciones.

Las aplicaciones que no usan MSAL pueden agregar compatibilidad con desafíos de notificaciones, solicitudes de notificaciones y funcionalidades de cliente para usar CAE.

Consideraciones de implementación

Para usar CAE, tanto la aplicación como la API de recursos a la que se tiene acceso deben estar habilitadas para CAE. Si una API de recursos implementa CAE y la aplicación declara que puede controlar CAE, la aplicación recibe tokens de CAE para ese recurso. Por esta razón, si declara que la aplicación está lista para CAE, la aplicación debe controlar el desafío de notificaciones CAE para todas las API de recursos que acepten tokens de acceso de identidad de Microsoft.

Sin embargo, la preparación del código para admitir recursos habilitados para CAE no limita su capacidad de trabajar con API que no admiten CAE. Si la aplicación no controla correctamente las respuestas de CAE, es posible que vuelva a intentar repetidamente una llamada API mediante un token que sea técnicamente válido, pero que se revoque debido a CAE.

Control de CAE en la aplicación

Comience agregando código para controlar las respuestas de la API de recursos que rechazan la llamada debido a CAE. Con CAE, las API devuelven un estado 401 y un encabezado WWW-Authenticate cuando se revoca el token de acceso o la API detecta un cambio en la dirección IP usada. El encabezado WWW-Authenticate contiene un desafío de notificaciones que la aplicación puede usar para adquirir un nuevo token de acceso.

Por ejemplo:

// Line breaks for legibility only

HTTP 401; Unauthorized

Bearer authorization_uri="https://login.windows.net/common/oauth2/authorize",
  error="insufficient_claims",
  claims="eyJhY2Nlc3NfdG9rZW4iOnsibmJmIjp7ImVzc2VudGlhbCI6dHJ1ZSwgInZhbHVlIjoiMTYwNDEwNjY1MSJ9fX0="

La aplicación comprueba si:

  • la llamada API que devuelve el estado 401
  • la existencia de un encabezado WWW-Authenticate que contiene:
    • un parámetro error con el valor insufficient_claims
    • un parámetro claims

Cuando se cumplen estas condiciones, la aplicación puede extraer y descodificar el desafío de notificaciones mediante la clase MSAL.NET WwwAuthenticateParameters.

if (APIresponse.IsSuccessStatusCode)
{
    // ...
}
else
{
    if (APIresponse.StatusCode == System.Net.HttpStatusCode.Unauthorized
        && APIresponse.Headers.WwwAuthenticate.Any())
    {
        string claimChallenge = WwwAuthenticateParameters.GetClaimChallengeFromResponseHeaders(APIresponse.Headers);

A continuación, la aplicación usa el desafío de notificaciones para adquirir un nuevo token de acceso para el recurso.

try
{
    authResult = await _clientApp.AcquireTokenSilent(scopes, firstAccount)
        .WithClaims(claimChallenge)
        .ExecuteAsync()
        .ConfigureAwait(false);
}
catch (MsalUiRequiredException)
{
    try
    {
        authResult = await _clientApp.AcquireTokenInteractive(scopes)
            .WithClaims(claimChallenge)
            .WithAccount(firstAccount)
            .ExecuteAsync()
            .ConfigureAwait(false);
    }
    // ...

Una vez que la aplicación esté lista para controlar el desafío de notificaciones que devuelve un habilitado para CAE, puede indicar a la identidad de Microsoft que la aplicación está lista. Para hacerlo desde la aplicación MSAL, incluya las funcionalidades de cliente "cp1" al crear su cliente público.

_clientApp = PublicClientApplicationBuilder.Create(App.ClientId)
    .WithDefaultRedirectUri()
    .WithAuthority(authority)
    .WithClientCapabilities(new [] {"cp1"})
    .Build();

Para probar la aplicación, puede iniciar la sesión de un usuario mediante Azure Portal para revocar las sesiones del usuario. La próxima vez que la aplicación llame a la API habilitada para CAE, se le pedirá al usuario que vuelva a autenticarse.

Ejemplos de código