Folyamatos hozzáférés-kiértékelést engedélyező API-k használata az alkalmazásokban

A folyamatos hozzáférés-kiértékelés (CAE) egy Microsoft Entra-funkció, amely lehetővé teszi a hozzáférési jogkivonatok visszavonását kritikus események és szabályzatok kiértékelése alapján, nem pedig a jogkivonatok élettartamon alapuló lejáratára támaszkodva. Egyes erőforrás API-k esetében, mivel a kockázat és a szabályzat valós időben van kiértékelve, ez akár 28 órára is növelheti a jogkivonatok élettartamát. Ezeket a hosszú élettartamú jogkivonatokat a Microsoft Authentication Library (MSAL) proaktív módon frissíti, ami növeli az alkalmazások rugalmasságát.

Ez a cikk bemutatja, hogyan használhatja a CAE-kompatibilis API-kat az alkalmazásokban. MSAL-t nem használó alkalmazások esetében hozzáadható a jogcímproblémák, jogcímkérelmek és ügyfélképességek támogatása a CAE használatához.

Implementálási szempontok

A CAE használatához az alkalmazásnak és a hozzá hozzáférő erőforrás API-nak caE-kompatibilisnek kell lennie. Ha azonban a kódot caE-kompatibilis erőforrás használatára készíti elő, az nem akadályozza meg, hogy olyan API-kat használjon, amelyek nincsenek engedélyezve.

Ha egy erőforrás API implementálja a CAE-t, és az alkalmazás deklarálja, hogy képes kezelni a CAE-t, az alkalmazás a CAE-jogkivonatokat kapja az adott erőforráshoz. Ezért, ha az alkalmazás CAE-jának készen áll, az alkalmazásnak kezelnie kell a CaE-jogcímre vonatkozó kihívást az összes olyan erőforrás-API-ra vonatkozóan, amelyek elfogadják a Microsoft Identity hozzáférési jogkivonatait. Ha nem kezeli a CAE-válaszokat ezekben az API-hívásokban, az alkalmazás egy ciklusban próbálkozhat újra egy API-hívással egy olyan jogkivonattal, amely még a jogkivonat visszaadott élettartama alatt van, de a hitelesítésszolgáltató miatt visszavonták.

A kód

Az első lépés a cae miatt a hívást elutasító erőforrás API-ból érkező válasz kezelésére vonatkozó kód hozzáadása. A CAE használatával az API-k 401-es állapotot és www-authenticate fejlécet adnak vissza, amikor a hozzáférési jogkivonatot visszavonták, vagy az API észleli a használt IP-cím módosítását. A WWW-Authenticate fejléc egy jogcímkérdést tartalmaz, amellyel az alkalmazás új hozzáférési jogkivonatot szerezhet be.

Példa:

// Line breaks for legibility only

HTTP 401; Unauthorized

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

Az alkalmazás a következőt ellenőrzi:

  • a 401-es állapotot visszaadó API-hívás
  • a www-authenticate fejléc megléte, amely a következőket tartalmazza:
    • egy "error" paraméter a "insufficient_claims" értékkel
    • egy "jogcím" paraméter

Ha ezek a feltételek teljesülnek, az alkalmazás kinyerheti és dekódolhatja a jogcímekkel kapcsolatos kihívást MSAL.NET WwwAuthenticateParameters osztály használatával.

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

Az alkalmazás ezután a jogcímekkel kapcsolatos kihívással szerez be egy új hozzáférési jogkivonatot az erőforráshoz.

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

Ha az alkalmazás készen áll a CAE-kompatibilis erőforrás által visszaadott jogcím-kihívás kezelésére, megadhatja a Microsoft Identity-nek, hogy az alkalmazás készen áll a CAE-ra. Ehhez az MSAL-alkalmazásban hozza létre a nyilvános ügyfelet a "cp1" ügyfélképességével.

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

Az alkalmazást úgy tesztelheti, hogy bejelentkezik egy felhasználóval az alkalmazásba, majd az Azure Portal használatával visszavonja a felhasználó munkameneteit. Amikor az alkalmazás legközelebb meghívja a CAE-kompatibilis API-t, a rendszer felkéri a felhasználót, hogy újrahitelesítse.

Az alkalmazást úgy tesztelheti, hogy bejelentkezik egy felhasználóba, majd az Azure Portal használatával visszavonja a felhasználó munkamenetét. Amikor az alkalmazás legközelebb meghívja a CAE-kompatibilis API-t, a rendszer felkéri a felhasználót az újrahitelesítésre.

Kódminták

Következő lépések