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


Общие сведения о токенах в Azure Active Directory B2C

Это важно

Начиная с 1 мая 2025 г. Azure AD B2C больше не будет доступен для приобретения для новых клиентов. Дополнительные сведения см. в разделе "Вопросы и ответы".

Azure Active Directory B2C (Azure AD B2C) выдает различные типы маркеров безопасности при обработке каждого потока проверки подлинности. В этой статье описываются формат, характеристики безопасности и содержимое каждого типа токена.

Типы токенов

Azure AD B2C поддерживает протоколы OAuth 2.0 и OpenID Connect, которые используют маркеры для проверки подлинности и безопасного доступа к ресурсам. Все маркеры, используемые в Azure AD B2C, — это веб-токены JSON (JWTs), содержащие утверждения информации о носителе и субъекте маркера.

Следующие маркеры используются в взаимодействии с Azure AD B2C:

  • Маркер идентификатора — JWT, содержащий утверждения, которые можно использовать для идентификации пользователей в приложении. Этот маркер безопасно отправляется в HTTP-запросах для обмена данными между двумя компонентами одного приложения или службы. Вы можете использовать утверждения в маркере идентификатора по своему усмотрению. Они часто используются для отображения сведений об учетной записи или принятия решений по управлению доступом в приложении. Идентификационные токены, выданные Azure AD B2C, подписаны, но не зашифрованы. Когда приложение или API получает маркер идентификатора, он должен проверить подпись, чтобы подтвердить подлинность маркера. Ваше приложение или API также должны проверить несколько требований в токене, чтобы доказать, что он действителен. В зависимости от требований сценария утверждения, проверенные приложением, могут отличаться, но приложение должно выполнять некоторые распространенные проверки утверждений в каждом сценарии.

  • Маркер доступа — JWT, содержащий утверждения, которые можно использовать для идентификации предоставленных разрешений для API. Маркеры доступа подписаны, но они не шифруются. Маркеры доступа используются для предоставления доступа к API и серверам ресурсов. Когда API получает маркер доступа, он должен проверить подпись, чтобы подтвердить подлинность маркера. Ваш API также должен проверить несколько утверждений в токене, чтобы доказать, что он действителен. В зависимости от требований сценария утверждения, проверенные приложением, могут отличаться, но приложение должно выполнять некоторые распространенные проверки утверждений в каждом сценарии.

  • Маркер обновления . Маркеры обновления используются для получения новых маркеров идентификатора и маркеров доступа в потоке OAuth 2.0. Они предоставляют приложению долгосрочный доступ к ресурсам от имени пользователей, не требуя взаимодействия с этими пользователями. Маркеры обновления непрозрачны для приложения. Они выдаются Azure AD B2C и могут быть проверены и интерпретированы только Azure AD B2C. Они живут долго, но приложение не следует писать с ожиданием того, что маркер обновления прослужит определенный период времени. Токены обновления могут быть аннулированы в любой момент по различным причинам. Единственный способ для вашего приложения узнать, является ли токен обновления допустимым, — это попытаться проверить его, выполнив запрос токена в Azure AD B2C. При обмене токена обновления на новый токен вы получаете новый токен обновления в ответе на запрос токена. Сохраните новый маркер обновления. Он заменяет маркер обновления, который вы ранее использовали в запросе. Это действие помогает гарантировать, что маркеры обновления остаются действительными до тех пор, пока это возможно. Одностраничные приложения, использующие поток кода авторизации с PKCE, всегда имеют срок действия токена обновления 24 часа. Дополнительные сведения о последствиях безопасности маркеров обновления в браузере.

Конечные точки

Зарегистрированное приложение получает маркеры и взаимодействует с Azure AD B2C, отправляя запросы в следующие конечные точки:

  • https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/authorize
  • https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/token

Токены безопасности, которые ваше приложение получает из Azure AD B2C, могут быть получены с /authorize или /token конечных точек. При получении токенов идентификатора из:

  • /authorize конечная точка выполняется с помощью неявного потока, который часто используется для входа пользователей в веб-приложения на основе JavaScript. Однако если приложение использует MSAL.js 2.0 или более поздней версии, не включите неявное предоставление потока в регистрации приложения, так как MSAL.js 2.0+ поддерживает поток кода авторизации с PKCE.
  • /token точка подключения осуществляется с помощью потока кода авторизации, который сохраняет токен скрытым от браузера.

Претензии

При использовании Azure AD B2C у вас есть возможность детальной настройки содержимого ваших токенов. Вы можете настроить потоки пользователей и пользовательские политики для отправки определенных наборов данных пользователя в утверждениях, необходимых для приложения. Эти утверждения могут включать стандартные свойства, такие как displayName и emailAddress. Приложения могут использовать эти утверждения для безопасной проверки подлинности пользователей и запросов.

Утверждения в токенах идентификаторов не возвращаются в определенном порядке. Новые утверждения можно в любое время вводить в маркеры идентификаторов. Ваше приложение не должно ломаться при появлении новых утверждений. Вы также можете включить настраиваемые атрибуты пользователя в утверждения.

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

Имя Требование Пример значения Описание
Публика aud 00001111-aaaa-2222-bbbb-3333cccc4444 Определяет целевого получателя маркера. Для Azure AD B2C аудитория — это идентификатор приложения. Приложение должно проверить это значение и отклонить маркер, если он не соответствует. Аудитория является синонимом ресурса.
Эмитент iss https://<tenant-name>.b2clogin.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/ Определяет службу маркеров безопасности (STS), которая создает и возвращает маркер. Он также определяет каталог, в котором пользователь прошел проверку подлинности. Ваше приложение должно проверить утверждение о выдающем, чтобы убедиться, что токен поступил из соответствующего конечного узла.
Время выдачи iat 1438535543 Время, когда был выдан токен, представлено во времени эпохи Unix.
Время окончания срока действия exp 1438539443 Время, когда маркер становится недействительным, представлено в формате времени эпохи. Приложение должно использовать это утверждение для проверки допустимости времени существования маркера.
Не ранее nbf 1438535543 Время, когда токен становится допустимым и представлено в формате времени эпохи. Это время обычно совпадает с временем выдачи маркера. Приложение должно использовать это утверждение для проверки допустимости времени существования маркера.
Версия ver 1.0 Версия маркера идентификатора, определённая Azure AD B2C.
Хэш кода c_hash SGCPtt01wxwfgnYZy2VJtQ Хэш кода включается в токен идентификатора только в том случае, если токен выдан вместе с кодом авторизации OAuth 2.0. Хэш кода можно использовать для проверки подлинности кода авторизации. Дополнительные сведения о выполнении этой проверки см. в спецификации OpenID Connect.
Хэш маркера доступа at_hash SGCPtt01wxwfgnYZy2VJtQ Хэш токена доступа, включенный в токен идентификатора, присутствует только если токен выдан вместе с токеном доступа OAuth 2.0. Хэш маркера доступа можно использовать для проверки подлинности маркера доступа. Дополнительные сведения о выполнении этой проверки см. в спецификации OpenID Connect.
Данный случай nonce 12345 Nonce — это стратегия, используемая для снижения риска атак воспроизведения токенов. Приложение может указать nonce в запросе nonce авторизации с помощью параметра запроса. Значение, указанное в запросе, выдается немодифицированным только в nonce утверждении токена идентификатора. Это утверждение позволяет приложению сравнить значение с указанным в запросе. Приложение должно осуществить данную проверку во время процесса проверки токена идентификатора.
Тема sub aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb Субъект, в отношении которого маркер утверждает сведения, например данные о пользователе приложения. Это значение является неизменяемым и не может быть переназначено или повторно использовано. Его можно использовать для безопасного выполнения проверок авторизации, например, когда маркер используется для доступа к ресурсу. По умолчанию утверждение о субъекте заполняется идентификатором объекта пользователя в каталоге.
Справочник по классу контекста проверки подлинности acr Неприменимо Используется только с более старыми полисами.
Политика платформы доверия tfp b2c_1_signupsignin1 Имя политики, которая использовалась для получения токена ID.
Время проверки подлинности auth_time 1438535543 Время последнего ввода учетных данных пользователя, представленного во времени в формате эпохи. Нет различия между проверкой подлинности нового входа, сеанса единого входа (SSO) или другого типа аутентификации. Это auth_time последний раз, когда приложение (или пользователь) инициировало попытку проверки подлинности в Azure AD B2C. Метод, используемый для проверки подлинности, не отличается.
Область действия scp Read Разрешения, предоставленные ресурсу на токен доступа. Несколько предоставленных разрешений разделяются пробелом.
Авторизованная сторона azp 975251ed-e4f5-4efd-abcb-5f1a8f566ab7 Идентификатор приложения клиентского приложения, инициирующего запрос.

Конфигурация

Следующие свойства используются для управления сроком действия маркеров безопасности, выпускаемых Azure AD B2C:

  • Время существования маркера доступа и идентификатора (минуты) — время существования маркера носителя OAuth 2.0, используемого для получения доступа к защищенному ресурсу. Значение по умолчанию — 60 минут. Минимальное (включительно) — 5 минут. Максимальное значение (включительно) составляет 1440 минут.

  • Время существования маркера обновления (дни) — максимальный период времени, до которого маркер обновления можно использовать для получения нового маркера доступа или идентификатора. Период времени также охватывает получение нового refresh token, если приложению была предоставлена offline_access список разрешений. Значение по умолчанию — 14 дней. Минимальное (включительно) — один день. Максимальное (включительно) — 90 дней.

  • Время существования скользящего окна обновления (дней) — после этого периода времени пользователь вынужден повторно пройти проверку подлинности независимо от срока действия последнего маркера обновления, полученного приложением. Его можно предоставить только в том случае, если переключатель установлен в положение Bounded. Оно должно быть больше или равно значению времени существования маркера обновления (дней). Если для параметра задано значение "Нет срока действия", вы не можете указать определенное значение. Значение по умолчанию — 90 дней. Минимальное (включительно) — один день. Максимальное (включительно) — 365 дней.

Следующие варианты использования включены с помощью следующих свойств:

  • Разрешить пользователю оставаться в мобильном приложении на неопределенный срок, пока пользователь постоянно активен в приложении. Вы можете задать время существования скользящего окна обновления (дней) на отсутствие окончания срока в пользовательском потоке входа.
  • Соблюдайте требования к безопасности и соответствию требованиям вашей отрасли, задав соответствующие сроки существования маркера доступа.

Эти параметры недоступны для сценариев сброса пароля пользователем.

Совместимость

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

  • Утверждение издателя (iss) — это свойство определяет тенант Azure AD B2C, который выдал токен. Значение по умолчанию — https://<domain>/{B2C tenant GUID}/v2.0/. Значение https://<domain>/tfp/{B2C tenant GUID}/{Policy ID}/v2.0/ содержит идентификаторы как для клиента Azure AD B2C, так и для пользовательского потока, которые были использованы в запросе маркера. Если приложению или библиотеке требуется соответствие Azure AD B2C спецификации OpenID Connect Discovery 1.0, используйте это значение.

  • Утверждение субъекта (sub) — это свойство, определяющее сущность, для которой токен утверждает информацию. Значением по умолчанию является ObjectID, который заполняет sub запрос в токене идентификатором объекта пользователя. Значение Не поддерживается предоставляется только для обеспечения обратной совместимости. Рекомендуется переключиться на ObjectID сразу после того, как вы сможете.

  • Утверждение, представляющее идентификатор политики - Этот параметр определяет тип утверждения, в которое помещается имя политики, используемое в запросе токена. Значение по умолчанию — tfp. Значение acr предоставляется только для обратной совместимости.

Сквозной режим

При запуске пользовательского процесса Azure AD B2C получает токен доступа от поставщика удостоверений. Azure AD B2C использует этот маркер для получения сведений о пользователе. Вы можете включить утверждение в потоке пользователя для передачи токена приложениям, которые вы регистрируете в Azure AD B2C. Приложение должно использовать рекомендуемый поток пользователя , чтобы воспользоваться преимуществами передачи маркера в качестве утверждения.

Azure AD B2C на данный момент поддерживает только передачу маркеров доступа поставщиков удостоверений OAuth 2.0, таких как Facebook и Google. Для всех других поставщиков удостоверений заявка возвращается пустой.

Ратификация

Чтобы проверить токен, приложение должно проверить как подпись, так и утверждения токена. Многие библиотеки с открытым кодом доступны для проверки JWT в зависимости от предпочитаемого языка. Рекомендуется изучить эти параметры, а не реализовать собственную логику проверки.

Проверка подписи

JWT содержит три сегмента, заголовок, текст и подпись. Сегмент подписи можно использовать для подтверждения подлинности токена, чтобы он мог быть доверен вашим приложением. Токены Azure AD B2C подписаны с помощью стандартных алгоритмов асимметричного шифрования, таких как RSA 256.

Заголовок токена содержит сведения о ключе и методе шифрования, используемом для подписи токена.

{
        "typ": "JWT",
        "alg": "RS256",
        "kid": "GvnPApfWMdLRi8PDmisFn7bprKg"
}

Значение утверждения alg — это алгоритм, который использовался для подписи токена. Значение утверждения kid — это открытый ключ, который использовался для подписи токена. В любое время Azure AD B2C может подписать токен с помощью любого из наборов пар открытого закрытого ключа. Azure AD B2C периодически поворачивает возможный набор ключей. Приложение должно быть записано для автоматического обработки этих изменений ключей. Разумной частотой проверки обновлений открытых ключей, используемых Azure AD B2C, является каждые 24 часа. Чтобы справиться с непредвиденными изменениями ключа, приложение должно быть разработано так, чтобы повторно извлечь открытые ключи в случае получения неожиданного значения kid.

Azure AD B2C имеет конечную точку метаданных OpenID Connect. С помощью этой конечной точки приложения могут запрашивать сведения о Azure AD B2C во время выполнения. Эта информация включает точки подключения, содержимое токенов и ключи подписи токенов. Клиент Azure AD B2C содержит документ метаданных JSON для каждой политики. Документ метаданных — это объект JSON, содержащий несколько полезных элементов информации. Метаданные содержат jwks_uri, что дает расположение набора открытых ключей, используемых для подписывания токенов. Это расположение предоставляется здесь, но лучше всего динамически получить расположение с помощью документа метаданных и синтаксического анализа jwks_uri:

https://contoso.b2clogin.com/contoso.onmicrosoft.com/b2c_1_signupsignin1/discovery/v2.0/keys

Документ JSON, расположенный по этому URL-адресу, содержит все сведения открытого ключа, используемые в определенный момент. Приложение может использовать kid утверждение в заголовке JWT, чтобы выбрать открытый ключ в документе JSON, который используется для подписи определенного токена. Затем он может выполнить проверку подписи с помощью правильного открытого ключа и указанного алгоритма.

Документ метаданных для B2C_1_signupsignin1 политики в клиенте contoso.onmicrosoft.com находится по адресу:

https://contoso.b2clogin.com/contoso.onmicrosoft.com/b2c_1_signupsignin1/v2.0/.well-known/openid-configuration

Чтобы определить, какая политика использовалась для подписи токена (и куда обращаться за метаданными), у вас есть два варианта. Во-первых, имя политики включается в токен tfp (по умолчанию) или клайм acr (как настроено). Вы можете проанализировать утверждения из содержимого JWT, декодировав это содержимое в кодировке base-64 и десериализовав полученную строку JSON. tfp или acr утверждение — это имя политики, которая использовалась для выдачи токена. Другой вариант — кодировать политику в значении state параметра при выполнении запроса, а затем декодировать его, чтобы определить, какая политика использовалась. Любой метод является допустимым.

Azure AD B2C использует алгоритм RS256, основанный на спецификации RFC 3447 . Открытый ключ состоит из двух компонентов: модуля RSA (n) и общедоступной экспоненты RSA (e). Вы можете программно преобразовать значения n и e в формат сертификата для проверки маркеров.

Описание того, как выполнять проверку подписи, выходит за рамки этого документа. Многие библиотеки с открытым исходным кодом доступны для проверки токена.

Проверка утверждений

Когда ваши приложения или API получают ID токен, они также должны выполнять несколько проверок утверждений в этом токене. Необходимо проверить следующие утверждения:

  • аудитория — проверяет, что токен идентификации предназначен для вашего приложения.
  • не до истечения срока действия . Проверяет, не истек ли маркер идентификатора.
  • издатель — подтверждает, что токен был выдан вашему приложению службой Azure AD B2C.
  • nonce — стратегия усиления защиты от атак воспроизведения токенов.

Полный список проверок, которые должно выполнять приложение, см. в спецификации OpenID Connect.

Узнайте больше об использовании маркеров доступа.