Condividi tramite


Come usare le API abilitate per la valutazione continua dell'accesso nelle applicazioni

La valutazione dell'accesso continuo (CAE) è una funzionalità di Microsoft Entra che consente di revocare i token di accesso in base a eventi critici e valutazione dei criteri, invece di basarsi sulla scadenza del token in base alla durata.

Poiché il rischio e i criteri vengono valutati in tempo reale, la durata dei token delle API delle risorse può aumentare fino a 28 ore. Questi token di lunga durata vengono aggiornati in modo proattivo da Microsoft Authentication Library (MSAL), aumentando la resilienza delle applicazioni.

Le applicazioni che non usano MSAL possono aggiungere il supporto per problematiche delle attestazioni, richieste di attestazioni e funzionalità client per usare Valutazione continua dell'accesso.

Considerazioni sull'implementazione

Per usare CAE, sia l'app che l'API delle risorse a cui accede devono essere abilitate per CAE. Se un'API della risorsa implementa CAE e l'applicazione lo dichiara in grado di gestire l'ambiente di certificazione, l'app riceve i token CAE per tale risorsa. Per questo motivo, se dichiari l'app pronta per CAE, l'applicazione deve gestire la richiesta di attestazione CAE per tutte le API di risorsa che accettano token di accesso a Microsoft Identity.

Tuttavia, la preparazione del codice per supportare le risorse abilitate per CAE non limita la possibilità di usare le API che non supportano CAE. Se l'app non gestisce correttamente le risposte CAE, potrebbe ripetere ripetutamente una chiamata API usando un token tecnicamente valido ma revocato a causa di CAE.

Gestione di CAE nell'applicazione

Per iniziare, aggiungere codice per gestire le risposte dall'API della risorsa che rifiuta la chiamata a causa di CAE. Con CAE, le API restituiscono uno stato 401 e un'intestazione WWW-Authenticate quando il token di accesso viene revocato o l'API rileva una modifica nell'indirizzo IP usato. L'intestazione WWW-Authenticate contiene una richiesta di attestazioni che l'applicazione può usare per acquisire un nuovo token di accesso.

Ad esempio:

// Line breaks for legibility only

HTTP 401; Unauthorized

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

L'app verifica la presenza di:

  • chiamata API che restituisce lo stato 401
  • l'esistenza di un'intestazione WWW-Authenticate contenente:
    • un error parametro con il valore insufficient_claims
    • un claims parametro

Quando queste condizioni vengono soddisfatte, l'app può estrarre e decodificare la richiesta di attestazioni usando la classe MSAL.NETWwwAuthenticateParameters.

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

L'app usa quindi la richiesta di attestazioni per acquisire un nuovo token di accesso per la risorsa.

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);
    }
    // ...

Quando l'applicazione è pronta per gestire la richiesta di attestazione restituita da una risorsa abilitata per CAE, è possibile indicare a Microsoft Identity che l'app è pronta per l'autenticazione condizionale. Per eseguire questa operazione nell'applicazione MSAL, compilare il client pubblico usando le funzionalità client di "cp1".

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

È possibile testare l'applicazione accedendo a un utente e quindi usando il portale di Azure per revocare la sessione dell'utente. La volta successiva che l'app chiama l'API abilitata per CAE, all'utente verrà chiesto di ripetere l'autenticazione.

Esempi di codice