Утверждение JWT aud
(Аудитория)
Согласно RFC 7519 :
Утверждение «aud» (аудитория) определяет получателей, для которых предназначен JWT. Каждый принципал, предназначенный для обработки JWT, ДОЛЖЕН идентифицировать себя со значением в заявлении аудитории. Если принципал, обрабатывающий заявку, не идентифицирует себя со значением в заявлении "aud", когда это утверждение присутствует, то JWT ДОЛЖЕН быть отклонен. В общем случае значение «aud» представляет собой массив строк с учетом регистра, каждая из которых содержит значение StringOrURI. В особом случае, когда JWT имеет одну аудиторию, значение «aud» МОЖЕТ быть единственной чувствительной к регистру строкой, содержащей значение StringOrURI. Интерпретация ценностей аудитории обычно зависит от конкретного приложения.
Использование этого утверждения НЕОБЯЗАТЕЛЬНО.
Утверждение Audience ( aud
), как определено в спецификации, является общим и зависит от приложения. Предполагаемое использование - определение предполагаемых получателей токена. То, что имеет в виду получатель, зависит от приложения. Значение аудитории - это либо список строк, либо одна строка, если есть только одно aud
утверждение. Создатель токена не обеспечивает aud
правильную проверку, ответственность за определение того, следует ли использовать токен, лежит на получателе.
Каким бы ни было значение, когда получатель проверяет JWT и хочет подтвердить, что токен предназначен для использования в его целях, он ДОЛЖЕН определить, какое значение в aud
идентифицирует себя, и токен должен проверяться только в том случае, если объявленный идентификатор получателя присутствует в aud
иске. Не имеет значения, является ли это URL-адресом или какой-либо другой строкой для конкретного приложения. Например, если моя система решает, что идентифицирует себя aud
с помощью строки: api3.app.com
тогда она должна принимать JWT только в том случае, если aud
утверждение содержит api3.app.com
в своем списке значений аудитории.
Конечно, получатели могут проигнорировать это aud
, поэтому это полезно только в том случае, если получатель хочет получить положительное подтверждение того, что токен был создан специально для него.
Моя интерпретация, основанная на спецификации, заключается в том, что aud
утверждение полезно для создания специально созданных JWT, которые действительны только для определенных целей. Для одной системы это может означать, что вы хотите, чтобы токен действовал для одних функций, но не действовал для других. Вы можете выпускать токены, ограниченные только определенной «аудиторией», при этом используя те же ключи и алгоритм проверки.
Поскольку в типичном случае JWT создается доверенным сервисом и используется другими доверенными системами (системами, которые не хотят использовать недействительные токены), этим системам просто необходимо координировать значения, которые они будут использовать.
Конечно, aud
это совершенно необязательно, и его можно игнорировать, если ваш вариант использования этого не требует. Если вы не хотите ограничивать использование токенов определенной аудиторией или ни одна из ваших систем на самом деле не будет проверять aud
токен, то это бесполезно.
Пример: токены доступа и обновления
Я могу придумать один надуманный (но простой) пример: возможно, мы хотим использовать JWT для доступа и обновления токенов без необходимости реализовывать отдельные ключи и алгоритмы шифрования, а просто хотим гарантировать, что токены доступа не будут проверяться как токены обновления или наоборот. -верс.
Используя, aud
мы можем указать требование refresh
для токенов обновления и требование access
для токенов доступа при создании этих токенов. Когда делается запрос на получение нового токена доступа из токена обновления, нам необходимо проверить, что токен обновления был подлинным токеном обновления. aud
Проверки , как описано выше , покажет нам , был ли маркер на самом деле действительный маркер обновления, посмотрев специально для претензии refresh
в aud
.
OAuth ID клиента против JWT aud
претензии
Идентификатор клиента OAuth совершенно не связан и не имеет прямого отношения к заявкам JWT aud
. С точки зрения OAuth токены являются непрозрачными объектами.
Приложение, которое принимает эти токены, отвечает за анализ и проверку значения этих токенов. Я не вижу особой ценности в указании идентификатора клиента OAuth в aud
заявке JWT .
aud REQUIRED for session_token. Contains the client_id of the client receiving the assertion.