Поделиться через


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

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

Так как риск и политика оцениваются в режиме реального времени, некоторые API-интерфейсы ресурсов могут увеличиваться до 28 часов. Эти долгосрочные маркеры заранее обновляются библиотекой проверки подлинности Майкрософт (MSAL), повышая устойчивость ваших приложений.

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

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

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

Однако подготовка кода для поддержки ресурсов САЭ не ограничивает возможность работы с API, которые не поддерживают ЦС. Если приложение не обрабатывает ответы CAE правильно, оно может повторно повторить вызов API с помощью маркера, который технически допустим, но отозван из-за ЦС.

Обработка ЦС в приложении

Сначала добавьте код для обработки ответов из API ресурсов, отклоняя вызов из-за ЦС. При использовании ЦС 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.NETWwwAuthenticateParameters.

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

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

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

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

Примеры кода