Guide pratique pour utiliser les API d’évaluation continue de l’accès dans vos applications

Évaluation continue de l’accès (CAE) est une fonctionnalité de Microsoft Entra qui permet de révoquer les jetons d’accès en fonction d’événements critiques et d’une évaluation de la stratégie au lieu de s’appuyer sur l’expiration des jetons en fonction de leur durée de vie. Pour certaines API de ressources, comme les risques et les stratégies sont évalués en temps réel, cela peut augmenter la durée de vie du jeton jusqu’à 28 heures. Ces jetons de longue durée sont actualisés préalablement par la bibliothèque d’authentification Microsoft (MSAL), ce qui augmente la résilience de vos applications.

Cet article explique comment utiliser les API prenant en charge l’évaluation continue de l’accès dans vos applications. Les applications qui n’utilisent pas MSAL peuvent ajouter la prise en charge des contestations aux revendications, des demandes de revendications et des fonctionnalités clientes pour utiliser l’évaluation continue de l’accès.

Considérations relatives à l’implémentation

Pour utiliser l’évaluation CAE, votre application et l’API de ressource à laquelle elle accède doivent être compatibles CAE. Toutefois, la préparation de votre code pour l’utilisation d’une ressource avec CAE ne vous empêche pas d’utiliser des API qui ne prennent pas en charge cette évaluation continue de l’accès.

Si une API de ressource implémente l’évaluation CAE et que votre application déclare qu’elle peut gérer la fonctionnalité CAE, votre application obtient des jetons CAE pour cette ressource. Pour cette raison, si vous déclarez que votre application est prête à utiliser l’évaluation continue de l’accès, votre application doit traiter le défi de revendications d’évaluation continue de l’accès pour toutes les API de ressources qui acceptent les jetons d’accès Microsoft Identity. Si vous ne gérez pas les réponses CAE dans ces appels d’API, votre application peut se retrouver à réessayer en boucle un appel d’API, avec un jeton qui est toujours dans la durée de vie retournée du jeton, mais qui a été révoqué en raison de l’évaluation CAE.

Code

La première étape consiste à ajouter du code pour traiter une réponse de l’API de ressource qui rejette l’appel en raison de l’évaluation continue de l’accès. Avec l’évaluation continue de l’accès, les API retournent un état 401 et un en-tête WWW-Authenticate lorsque le jeton d’accès a été révoqué ou que l’API détecte une modification de l’adresse IP utilisée. L’en-tête WWW-Authenticate contient un défi de revendications que l’application peut utiliser pour acquérir un nouveau jeton d’accès.

Par exemple :

// Line breaks for legibility only

HTTP 401; Unauthorized

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

Votre application recherche les éléments suivants :

  • l’appel d’API retournant l’état 401
  • l’existence d’un en-tête WWW-Authenticate contenant :
    • un paramètre « error » avec la valeur « insufficient_claims »
    • un paramètre « claims »

Lorsque ces conditions sont réunies, l’application peut extraire et décoder le défi de revendications à l’aide de la classe WwwAuthenticateParameters MSAL.NET.

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

Votre application utilise ensuite le défi de revendications pour acquérir un nouveau jeton d’accès pour la ressource.

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

Une fois que votre application est prête à traiter le défi de revendications retourné par une ressource prenant en charge l’évaluation continue de l’accès, vous pouvez indiquer à Microsoft Identity que votre application est prête à utiliser l’évaluation continue de l’accès. Pour effectuer cette opération dans votre application MSAL, générez votre client public à l’aide des fonctionnalités client de « cp1 ».

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

Vous pouvez tester votre application en connectant un utilisateur à l’application, puis en utilisant le portail Azure pour révoquer les sessions de l’utilisateur. La prochaine fois que l’application appellera l’API prenant en charge l’évaluation continue de l’accès, l’utilisateur sera invité à se réauthentifier.

Vous pouvez tester votre application en connectant un utilisateur, puis en utilisant le portail Azure pour révoquer la session de l’utilisateur. La prochaine fois que l’application appellera l’API prenant en charge l’évaluation continue de l’accès, l’utilisateur sera invité à se réauthentifier.

Exemples de code

Étapes suivantes