Чи повинні бути включені дозволи на доступ та ролі до корисного навантаження JWT?


9

Чи повинна інформація про дозволи та ролі клієнта включатись у JWT?

Наявність такої інформації в токені JWT буде дуже корисною, оскільки кожного разу приходить дійсний маркер, було б простіше витягнути інформацію про дозвіл користувача, і не потрібно буде викликати базу даних для того ж. Але чи включення такої інформації та не подвійна перевірка її в базі даних будуть проблемою безпеки?

Або,

Така інформація, як зазначена вище, ніколи не повинна бути частиною JWT, і тільки база даних повинна використовуватися для перевірки ролей доступу та дозволів користувача?

Відповіді:


7

Мета включення претензій в маркер полягає в тому, що вам не доведеться мати зв’язок між ресурсом і постачальником аутентифікації.

Ресурс може просто перевірити, чи маркер має дійсний підпис і довіряти вмісту.

Якщо припустити, що приватний ключ є приватним для аутентичного сервера, ви хороші. Деякі провайдери змінюють свій ключ, щоб зменшити ризик.

Якщо ви задумаєтесь, якщо ресурс зателефонував на сервер аутентифікації, щоб отримати претензії. Тоді, по суті, забезпечується його розмова з правильним сервером аналогічними методами довіри.


Ну дякую за прекрасну відповідь, чи можу я дізнатися більше про те, що ви мали на увазі у своїй заяві "Деякі провайдери змінюють свій ключ, щоб зменшити ризик". ?
Аншул Сахні

1
Отже, замість того, щоб мати фіксований ключ підпису, постачальник аутентифікації буде змінювати його так часто і надавати кінцеву точку серверам ресурсів для завантаження загальнодоступної половини. Ресурси повинні телефонувати на сервер аутентифікації так часто, але не один раз за запит
Ewan

Тож усі маркер недійсний щоразу, коли сервіс змінює підпис ключа
Anshul Sahni

1
Зазвичай вони матимуть більше одного можливого ключа, так що лексеми не будуть визнані недійсними. токен буде містити "ідентифікатор ключа", щоб вказати ресурс, яким користуватися
Ewan

Єдине, що мені тут не вистачає, це те, як діяти, коли дані JWT недійсні. Скажіть, змінилися ролі на стороні сервера, але клієнт все ще тримає маркер із усім набором ролей. Ви маєте змогу відкликати жетони на стороні сервера, щоб ті жетони, що містять застарілу інформацію, більше не дійсні і не підлягають застосуванню для подальших запитів. Це відповідає тому, що Ewans якось пропонує (дозволяючи серверу відкликати маркер) з тієї чи іншої причини.
Лаїв

1

З мого досвіду, якщо всі ваші системи використовують центральну базу даних ролей та дозволів, ви можете додати все це до JWT.

Однак такий підхід може не працювати добре в сценаріях SSO, коли сам сервер аутентифікації не має уявлення про цільову систему, яка отримає та довірить маркер.

Ролі та дозволи користувача повністю залежать від приймача маркера JWT. Особливо це актуально, коли ви інтегруєте SSO auth з JWT в деякі застарілі системи, які вже мають свою підсистему дозволів, і тому їм потрібна лише одна претензія, щоб бути присутнім у JWT - заяві про ідентифікацію користувача.


Я з цим згоден. Дозволи користувача не повинні бути частиною jwt спеціально в SSO, оскільки idp не знає, з якими іншими службами збирається спілкуватися цей користувач .. замість цього ресурс повинен реалізувати частину авторизації після підтвердження особи для користувача.
Manish Rawat

Я також погоджуюся, що претензії на дозвіл у JWT не є хорошою ідеєю, крім простого монолітного API. Я написав про це запис у блозі: sdoxsee.github.io/blog/2020/01/06/…
sdoxsee
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.