Dela via


Så här använder du API:er för kontinuerlig åtkomstutvärdering i dina program

Kontinuerlig åtkomstutvärdering (CAE) är en Microsoft Entra-funktion som gör att åtkomsttoken kan återkallas baserat på kritiska händelser och principutvärdering, i stället för att förlita sig på tokens upphörande baserat på livslängd.

Eftersom risk och princip utvärderas i realtid kan vissa resurs-API:ers tokenlivslängd öka med upp till 28 timmar. Dessa långlivade token uppdateras proaktivt av Microsoft Authentication Library (MSAL), vilket ökar återhämtningstiden för dina program.

Program som inte använder MSAL kan lägga till stöd för anspråksutmaningar, anspråksbegäranden och klientfunktioner så att de kan använda utvärdering av kontinuerlig åtkomst.

Implementeringöverväganden

Om du vill använda CAE måste både appen och resurs-API:et som den har åtkomst till vara CAE-aktiverade. Om ett resurs-API implementerar CAE och ditt program deklarerar att det kan hantera CAE tar appen emot CAE-token för den resursen. Om du därför deklarerar din app CAE-klar måste ditt program hantera CAE-anspråksutmaningen för alla resurs-API:er som accepterar Åtkomsttoken för Microsoft Identity.

Att förbereda koden för att stödja CAE-aktiverade resurser begränsar dock inte dess möjlighet att arbeta med API:er som inte stöder CAE. Om appen inte hanterar CAE-svar korrekt kan den upprepade gånger försöka utföra ett API-anrop igen med en token som är tekniskt giltig men som återkallas på grund av CAE.

Hantera CAE i ditt program

Börja med att lägga till kod för att hantera svar från resurs-API:et som avvisar anropet på grund av CAE. Med CAE returnerar API:er en 401-status och en WWW-Authenticate rubrik när åtkomsttoken återkallas eller API:et identifierar en ändring i den IP-adress som används. Rubriken WWW-Authenticate innehåller en anspråksutmaning som programmet kan använda för att hämta en ny åtkomsttoken.

Till exempel:

// Line breaks for legibility only

HTTP 401; Unauthorized

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

Appen söker efter:

  • API-anropet som returnerar statusen 401
  • förekomsten av en WWW-Authenticate rubrik som innehåller:
    • en error parameter med värdet insufficient_claims
    • en claims parameter

När dessa villkor uppfylls kan appen extrahera och avkoda anspråksutmaningen med hjälp av klassen MSAL.NETWwwAuthenticateParameters.

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

Appen använder sedan anspråksutmaningen för att hämta en ny åtkomsttoken för resursen.

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

När ditt program är redo att hantera anspråksutmaningen som returneras av en CAE-aktiverad resurs kan du berätta för Microsoft Identity att din app är CAE-redo. Om du vill göra detta i ditt MSAL-program skapar du den offentliga klienten med hjälp av "cp1"klientfunktionerna i .

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

Du kan testa ditt program genom att logga in en användare och sedan använda Azure Portal för att återkalla användarens session. Nästa gång appen anropar DET CAE-aktiverade API:et uppmanas användaren att autentisera igen.

Kodexempel