Классическое приложение, которое обращается к веб-API (вызов веб-API)

Теперь у вас есть токен и вы можете вызвать защищенный веб-API.

Вызов веб-API

Свойства объекта AuthenticationResult в MSAL.NET

Для получения маркеров методы возвращают объект AuthenticationResult. Для асинхронных методов возвращается Task<AuthenticationResult>.

MSAL.NET AuthenticationResult предоставляет следующие параметры:

  • AccessToken — обеспечивает для веб-API доступ к ресурсам. Это строковый параметр, который обычно представляет собой маркер JWT в кодировке Base-64. Клиент никогда не должен считывать содержимое маркера доступа. Стабильность формата не гарантируется, и маркер может быть зашифрован для конкретного ресурса. Написание кода, который зависит от содержимого маркера доступа на стороне клиента, является одним из основных источников для ошибок и сбоев в логике клиента. Дополнительные сведения см. в разделе Маркеры доступа.
  • IdToken — предназначается для пользователей. Этот параметр является зашифрованным маркером JWT. Дополнительные сведения см. в разделе Маркеры идентификации.
  • ExpiresOn — сообщает дату и время истечения срока действия маркера.
  • TenantId — содержит сведения о клиенте, в котором был найден пользователь. Для гостевых пользователей в сценариях Microsoft Entra B2B идентификатор клиента является гостевым клиентом, а не уникальным клиентом. При предоставлении маркера для пользователя в объекте AuthenticationResult также содержится информация об этом пользователе. Для потоков конфиденциальных клиентов, где маркеры запрашиваются без пользователя для приложения, эта информация о пользователе имеет значение NULL.
  • Scopes — обозначает области, для которых выдан маркер.
  • Уникальный идентификатор пользователя.

IAccount

В MSAL.NET понятие учетной записи определяется через интерфейс IAccount. Такое радикальное изменение обеспечивает правильную семантику. Один и тот же пользователь может иметь несколько учетных записей в разных каталогах Microsoft Entra. Также MSAL.NET предоставляет более подробные сведения в сценариях с гостевым входом благодаря добавлению информации о домашней учетной записи. Структура интерфейса IAccount представлена на следующей схеме.

IAccount interface structure

Класс AccountId определяет учетную запись в конкретном клиенте с помощью свойств, приведенных в следующей таблице.

Свойство Description
TenantId Строковое представление идентификатора GUID, которое является идентификатором клиента, где находится учетная запись.
ObjectId Строковое представление идентификатора GUID, являющееся идентификатором пользователя, которому принадлежит учетная запись в клиенте.
Identifier Уникальный идентификатор для учетной записи. Identifier является объединением ObjectId и TenantId, разделенных запятой. Для этих значений шифрование Base 64 не применяется.

Интерфейс IAccount предоставляет сведения об одной учетной записи. Один и тот же пользователь может быть в разных клиентах, это означает, что у пользователя может быть несколько учетных записей. Компоненты этого интерфейса представлены в следующей таблице.

Свойство Description
Username Строка с отображаемым значением в формате UserPrincipalName (UPN), например john.doe@contoso.com. Эта строка может иметь значение NULL, в отличие от свойств HomeAccountId и HomeAccountId.Identifier, у которых не может быть значения NULL. Это свойство заменяет свойство DisplayableId интерфейса IUser из предыдущих версий MSAL.NET.
Environment Строка с поставщиком удостоверений для этой учетной записи, например login.microsoftonline.com. Это свойство заменяет свойство IdentityProvider интерфейса IUser, за исключением того, что в свойстве IdentityProvider также содержались сведения о клиенте в дополнение к информации об облачной среде. Содержащееся здесь значение определяет только узел.
HomeAccountId Идентификатор домашней учетной записи пользователя. Это свойство однозначно идентифицирует пользователя в клиентах Microsoft Entra.

Использование маркера для вызова защищенного API

После того как AuthenticationResult возвращается MSAL в переменную result, ее нужно добавить в HTTP-заголовок авторизации перед тем, как делать вызов для доступа к защищенному веб-API.

httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);

// Call the web API.
HttpResponseMessage response = await _httpClient.GetAsync(apiUri);
...
}

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

См. следующую статью для этого сценария: Переход к рабочей среде.