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, a nie polegania na wygaśnięciu tokenu na podstawie okresu istnienia. W przypadku niektórych interfejsów API zasobów, ponieważ ryzyko i zasady są oceniane w czasie rzeczywistym, może to zwiększyć okres istnienia tokenu do 28 godzin. Te długotrwałe tokeny są aktywnie odświeżane przez bibliotekę Microsoft Authentication Library (MSAL), zwiększając odporność aplikacji.

W tym artykule pokazano, jak używać interfejsów API z obsługą caE w aplikacjach. 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. Jednak przygotowanie kodu do korzystania z zasobu z włączoną usługą CAE nie uniemożliwi korzystania z interfejsów API, które nie są włączone w trybie 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 Microsoft. Jeśli nie obsługujesz odpowiedzi CAE w tych wywołaniach interfejsu API, twoja aplikacja może zakończyć się ponowić próbę wywołania interfejsu API za pomocą tokenu, który jest nadal w zwracanej cyklu życia tokenu, ale został odwołany ze względu na caE.

Kod

Pierwszym krokiem jest dodanie kodu do obsługi odpowiedzi z interfejsu API zasobów odrzucającego wywołanie z powodu caE. W przypadku interfejsu CAE interfejsy API zwracają stan 401 i nagłówek WWW-Authenticate 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 sprawdzi, czy:

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

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

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żyje 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 zwróconego przez zasób z włączoną usł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 klienta "cp1".

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

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

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

Następne kroki