aud
Претензія JWT (аудиторія)
Відповідно до RFC 7519 :
Заявка "ауди" (аудиторія) ідентифікує одержувачів, для яких призначено JWT. Кожен принципал, призначений для обробки JWT, ОБОВ'ЯЗКОВО визначити себе зі значенням претензії на аудиторію. Якщо основна особа, яка обробляє претензію, не ідентифікує себе зі значенням претензії "aud", коли ця претензія присутня, тоді JWT ОБОВ'ЯЗКОВО бути відхилений. У загальному випадку значення "aud" - це масив чутливих до регістру рядків, кожен з яких містить значення StringOrURI. У спеціальному випадку, коли у JWT є одна аудиторія, значення "aud" МОЖЕ бути єдиною чутливою до регістру рядком, що містить значення StringOrURI. Інтерпретація цінностей аудиторії, як правило, специфічна для програми.
Використання цієї претензії НЕОБХІДНО.
Заява про аудиторію ( 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 проти aud
претензії JWT
Ідентифікатор клієнта OAuth абсолютно не пов'язаний і не має прямої кореляції з aud
претензіями JWT . З точки зору OAuth, лексеми - це непрозорі об'єкти.
Програма, яка приймає ці лексеми, несе відповідальність за розбір і перевірку значення цих лексем. Я не бачу великої цінності у визначенні ідентифікатора клієнта OAuth у aud
претензії на JWT .
aud REQUIRED for session_token. Contains the client_id of the client receiving the assertion.