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.