Udostępnij za pośrednictwem


Jak używać interfejsów API z obsługą ciągłego dostępu w aplikacjach

Continuous Access Evaluation (CAE) to funkcja firmy Microsoft Entra, która umożliwia odwoływanie tokenów dostępu na podstawie krytycznych zdarzeń i oceny zasad, zamiast polegać na wygaśnięciu tokenu na podstawie okresu istnienia.

Ponieważ ryzyko i zasady są oceniane w czasie rzeczywistym, niektóre interfejsy API zasobów mogą wzrosnąć o maksymalnie 28 godzin. Te długotrwałe tokeny są aktywnie odświeżane przez bibliotekę Microsoft Authentication Library (MSAL), zwiększając odporność aplikacji.

W aplikacjach, które nie korzystają z biblioteki MSAL, można dodać obsługę wyzwań z oświadczeniami, żądań oświadczeń i możliwości klienta na potrzeby korzystania z ciągłej weryfikacji dostępu.

Uwagi dotyczące implementacji

Aby korzystać ze środowiska CAE, zarówno aplikacja, jak i interfejs API zasobów, do których uzyskuje dostęp, musi być włączona funkcja CAE. Jeśli interfejs API zasobów implementuje interfejs CAE, a aplikacja deklaruje, że może obsługiwać interfejs CAE, aplikacja otrzymuje tokeny CAE dla tego zasobu. Z tego powodu, jeśli zadeklarowasz gotowość caE aplikacji, aplikacja musi obsługiwać wyzwanie oświadczenia CAE dla wszystkich interfejsów API zasobów, które akceptują tokeny dostępu tożsamości firmy Microsoft.

Jednak przygotowanie kodu do obsługi zasobów z obsługą caE nie ogranicza możliwości pracy z interfejsami API, które nie obsługują interfejsów CAE. Jeśli aplikacja nie obsługuje poprawnie odpowiedzi CAE, może wielokrotnie ponowić próbę wywołania interfejsu API przy użyciu tokenu, który jest technicznie prawidłowy, ale jest odwołany ze względu na caE.

Obsługa caE w aplikacji

Zacznij od dodania kodu do obsługi odpowiedzi z interfejsu API zasobów odrzucającego wywołanie z powodu caE. W przypadku środowiska CAE interfejsy API zwracają stan 401 i WWW-Authenticate nagłówek po odwołaniu tokenu dostępu lub interfejs API wykryje zmianę używanego adresu IP. Nagłówek WWW-Authenticate zawiera wyzwanie oświadczeń, którego aplikacja może użyć do uzyskania nowego tokenu dostępu.

Na przykład:

// Line breaks for legibility only

HTTP 401; Unauthorized

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

Aplikacja sprawdza, czy:

  • wywołanie interfejsu API zwracające stan 401
  • istnienie nagłówka zawierającego WWW-Authenticate :
    • parametr error z wartością insufficient_claims
    • claims parametr

Po spełnieniu tych warunków aplikacja może wyodrębnić i zdekodować wyzwanie dotyczące oświadczeń przy użyciu klasy MSAL.NETWwwAuthenticateParameters.

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

Następnie aplikacja używa wyzwania dotyczącego oświadczeń, aby uzyskać nowy token dostępu dla zasobu.

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

Gdy aplikacja będzie gotowa do obsługi żądania oświadczenia zwróconego przez zasób z obsługą caE, możesz poinformować, że usługa Microsoft Identity twoja aplikacja jest gotowa do użycia w usłudze CAE. Aby to zrobić w aplikacji MSAL, skompiluj klienta publicznego przy użyciu funkcji "cp1"klienta programu .

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

Aplikację można przetestować, logując się do użytkownika, a następnie używając witryny Azure Portal, aby odwołać sesję użytkownika. Przy następnym wywołaniu interfejsu API z obsługą caE użytkownik zostanie poproszony o ponowne uwierzytelnienie.

Przykłady kodu