Использование 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, пользователю будет предложено повторно пройти проверку подлинности.
Примеры кода
- Включение одностраничного приложения Angular для входа пользователей и вызова Microsoft Graph
- Включение одностраничного приложения React для входа пользователей и вызова Microsoft Graph
- Включение веб-приложения ASP.NET Core для входа пользователей и вызова Microsoft Graph