Использование API-интерфейсов с поддержкой непрерывной оценки доступа в приложениях

Непрерывная оценка доступа (CAE) — это функция Microsoft Entra, которая позволяет отменять маркеры доступа на основе критических событий и оценки политики, а не на основе истечения срока действия маркера на основе времени существования. Поскольку риск и политика оцениваются в режиме реального времени, для некоторых API ресурсов это может увеличить срок действия маркеров до 28 часов. Эти долгосрочные маркеры заранее обновляются библиотекой проверки подлинности Майкрософт (MSAL), повышая устойчивость ваших приложений.

В этой статье показано, как использовать интерфейсы API с поддержкой CAE в приложениях. Для приложений, не использующих MSAL, можно добавить поддержку требований и запросов утверждений и возможностей клиента для использования CAE.

Вопросы реализации

Чтобы использовать ЦС, приложение и API ресурсов, к нему доступ, должны быть включены ЦС. Однако подготовка кода к использованию ресурса с поддержкой ЦС не препятствует использованию API, которые не включены ЦС.

Если API ресурсов реализует CAE и приложение объявляет, что оно может обрабатывать ЦС, ваше приложение получает маркеры CAE для этого ресурса. По этой причине, если вы объявили, что в приложении работает CAE, это приложение должно быть в состоянии обрабатывать запросы с требованием на утверждение CAE для всех API ресурсов, которые принимают маркеры доступа Microsoft Identity. Если вы не обрабатываете ответы CAE в этих вызовах API, ваше приложение может в конечном итоге повторить вызов API с маркером, который по-прежнему находится в возвращаемом сроке существования маркера, но был отменен из-за ЦС.

Код

Первым шагом является добавление кода для обработки ответа от API ресурса, отклоняющего вызов из-за CAE. При использовании CAE API будут возвращать статус 401 и заголовок WWW-Authenticate, когда маркер доступа был отозван или когда API-интерфейс обнаруживает изменение используемого IP-адреса. Заголовок WWW-Authenticate содержит запрос с требованием на утверждение, который приложение может использовать для получения нового маркера доступа.

Например:

// Line breaks for legibility only

HTTP 401; Unauthorized

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

Приложение будет проверять следующее:

  • вызов API возвращает состояние 401
  • Существование заголовка WWW-Authenticate, содержащего следующее:
    • параметр "error" со значением "insufficient_claims"
    • параметр "claims"

При соблюдении этих условий приложение может извлекать и декодировать запрос с требованием на утверждение с помощью класса MSAL.NET WwwAuthenticateParameters.

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

Приложение будет использовать запрос с требованием на утверждение для получения нового маркера доступа для ресурса.

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

Когда ваше приложение будет готово к обработке запрос с требованием на утверждение, возвращенного ресурсом с включенным CAE, вы сможете сообщить Microsoft Identity о готовности вашего приложения принимать CAE. Для этого в приложении MSAL, создайте общедоступный клиент, используя возможности клиента cp1.

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

Вы можете протестировать приложение, выполнив вход в пользователя приложения, а затем воспользоваться порталом Azure для отзыва сеансов пользователя. В следующий раз, когда приложение вызовет API с поддержкой CAE, пользователю будет предложено повторно пройти аутентификацию.

Вы можете протестировать приложение, выполнив вход в него, а затем отозвав сеанс пользователя на портале Azure. В следующий раз, когда приложение вызовет API с поддержкой CAE, пользователю будет предложено повторно пройти проверку подлинности.

Примеры кода

Следующие шаги