Проверка подлинности пользователя с помощью маркера удостоверения для Exchange

Важно!

Устаревшие маркеры удостоверений пользователей Exchange и маркеры обратного вызова будут отключены для всех клиентов Exchange Online в октябре 2024 г. в рамках инициативы Майкрософт по обеспечению безопасного будущего, которая предоставляет организациям средства, необходимые для реагирования на текущий ландшафт угроз. Маркеры удостоверений пользователей Exchange по-прежнему будут работать в локальной среде Exchange. Проверка подлинности вложенных приложений — это рекомендуемый подход к токенам в будущем. Дополнительные сведения см. в записи блога о проверке подлинности вложенных приложений и устаревших маркерах Exchange.

Маркеры удостоверений Exchange позволяют надстройке однозначно определять пользователей. Установив удостоверение пользователя, вы можете реализовать схему проверки подлинности единого входа (SSO) для серверной службы, которая позволяет клиентам, использующим надстройки Outlook, подключаться к вашей службе без входа. Дополнительные сведения о том, в каких случаях следует использовать такие токены, см. в разделе Маркер удостоверения пользователя Exchange. В этой статье мы рассмотрим простой способ проверки подлинности пользователя во внутренней службе с помощью маркера удостоверения Exchange.

Важно!

Это лишь простой пример реализации единого входа. Как всегда, при работе с удостоверениями и проверкой подлинности необходимо убедиться, что код соответствует требованиям к безопасности в вашей организации.

Отправка маркера удостоверения с каждым запросом

Для начала надстройка должна получить маркер удостоверения пользователя Exchange с сервера при помощи метода getUserIdentityTokenAsync. Затем надстройка отправляет этот маркер с каждым запросом ко внутренней службе. Он может быть включен в заголовок или текст запроса.

Проверка маркера

Внутренняя служба ДОЛЖНА проверить маркер, прежде чем принимать его. Очень важно убедиться, что маркер был выдан сервером Exchange Server пользователя. Сведения о проверке маркеров удостоверений Exchange см. в статье Проверка маркера удостоверения Exchange.

После проверки и декодирования полезные данные маркера выглядят примерно так:

{ 
    "aud" : "https://mailhost.contoso.com/IdentityTest.html",
    "iss" : "00000002-0000-0ff1-ce00-000000000000@mailhost.contoso.com",
    "nbf" : "1505749527",
    "exp" : "1505778327",
    "appctxsender":"00000002-0000-0ff1-ce00-000000000000@mailhost.context.com",
    "isbrowserhostedapp":"true",
    "appctx" : {
        "msexchuid" : "53e925fa-76ba-45e1-be0f-4ef08b59d389",
        "version" : "ExIdTok.V1",
        "amurl" : "https://mailhost.contoso.com:443/autodiscover/metadata/json/1"
    }
}

Сопоставление маркера с пользователем во внутренней службе

Внутренняя служба может определить уникальный ИД пользователя на основе маркера и сопоставить его с пользователем во внутренней системе. Например, если для хранения пользователей используется база данных, вы можете добавить уникальный ИД к записи пользователя в ней.

Создание уникального идентификатора

Используйте сочетание свойств и msexchuidamurl . Например, вы можете сцепить эти два значения и создать строку в кодировке Base64. Это значение всегда можно получить из маркера, поэтому вы можете сопоставить маркер удостоверения пользователя Exchange с пользователем в системе.

Проверка пользователя

Создав уникальный идентификатор, необходимо проверить наличие в системе пользователя с этим ИД.

  • Если пользователь найден, внутренняя служба рассматривает запрос как прошедший проверку подлинности и разрешает продолжить его выполнение.

  • Если же пользователь не найден, внутренняя служба возвращает ошибку, указывающую на то, что пользователь должен выполнить вход. Затем надстройка предлагает пользователю войти во внутреннюю службу, используя имеющийся способ проверки подлинности. После проверки подлинности пользователя маркер удостоверения Exchange отправляется вместе с другими данными проверки подлинности. Затем внутренняя служба может добавить уникальный идентификатор к записи пользователя в системе.