Клієнти, що носять лише брелок: чому вони існують?


10

Я намагаюся обернути голову навколо концепції bearer-onlyклієнтів у Кейлок.

Я розумію концепцію "громадськість та конфіденційність" та концепцію службових рахунків та grant_type=client_credentialsінше. Але з bearer-only, я застряг.

Гуглінг виявляє лише фрагменти дискусій, які говорять:

Ви не можете отримати маркер від keycloak з bearer-onlyклієнтом.

Документи також незрозумілі. Все, що вони кажуть:

Тип доступу лише для носія означає, що програма дозволяє лише запити маркера на носій.

Гаразд, якщо моя програма дозволяє лише запити на маркер носія, як я можу отримати цей маркер, якщо я не можу отримати його від Keycloak, використовуючи клієнтський ідентифікатор / секрет клієнта?

А якщо ви не можете отримати маркер, що ви можете взагалі? Чому ці клієнти існують? Чи може хтось, будь ласка, надати приклад використання цього типу клієнта?

Відповіді:


5

На моє розуміння, він використовується, коли у вас є якась внутрішня служба. Скажімо, у вас є ServiceAі ServiceB. Користувач дзвонить, ServiceAхто вручну дзвонить ServiceB. ServiceBніколи не викликається користувачем безпосередньо, лише іншими службами. ServiceAотримає маркер за допомогою облікових даних користувача. А потім буде використовувати цей маркер для дзвінка ServiceB. ServiceBніколи не ініціюватиме вхід. Він просто використовувати маркер для перевірки дозволів.

У цьому випадку ServiceA буде, confidentialа ServiceB - bearer-onlyклієнтами.


1
Отже, це означає, що якщо мій клієнт має лише пред'явника, єдиний доступний для мене варіант - це зробити запити на підтвердження до Keycloak, щоб переконатися, що маркер від ServiceAцього дійсний. Правильно? Але якщо це так, навіщо взагалі дзвонити на Кейклоак? Якщо мій клієнт має відкритий ключ Keycloak, він може перевірити його, використовуючи цей ключ, не викликаючи жодного разу Keycloak.
kurtgn

Через сферу дії лексеми. Сервіс A повинен мати інший обсяг, ніж Сервіс B, тому вам потрібен Keycload для обміну маркерів
Джуліан Егнер

@JulianEgner Це має сенс, за винятком того, що Token Exchange зараз знаходиться в Tech Preview, не підтримується повністю, і його потрібно чітко включити за допомогою Env-змінної. Чи bearer-onlyсправді існує лише підтримка цього випадку, який ще не готовий?
irbull

@irbull звідки ви отримали інформацію про те, що обмін токенами буде в технічному перегляді?
Джуліан Егнер

@JulianEgner Це було зазначено в самому дні їхніх документів. В списку keycloak.org/docs/latest/securing_apps/… там написано: "Token Exchange - це технологія попереднього перегляду і не підтримується повністю. Ця функція вимкнена за замовчуванням".
irbull

5

Значення типу доступу лише для носія

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

Тож якщо ви обрали свого клієнта, bearer-onlyто в такому випадку адаптер keycloak не буде намагатися аутентифікувати користувачів, а лише перевірить маркери носія. Ось чому документація keycloak також згадана bearer-onlyпрограма не дозволить ввійти з браузера.

А якщо ви не можете отримати маркер, що ви можете взагалі? Чому ці клієнти існують?

Ваш клієнт не може бути встановлений лише як пред'явник на сервері Keycloak. Ви все ще можете використовувати лише носій для налаштування адаптера. Keycloak не дозволяє клієнтам "тільки на пред'явника" (під час налаштування вашого клієнта на сервері) отримувати жетони від сервера. Спробуйте змінити свого клієнта на "конфіденційним" на сервері та встановіть лише носій на конфігурацію адаптера (keycloak.json).

Тож якщо ви розумієте вищевикладене твердження, то якщо у вас є дві мікросервіси, які розмовляють між собою у випадку, виклик буде, confidentialі виклик будеbearer-only

І Кійлок також згадав

Клієнт, що несе лише пред'явника, - це веб-сервіс, який ніколи не ініціює вхід. Зазвичай він використовується для забезпечення резервного доступу.

Отже, якщо ви хочете використовувати будь-який адаптер, який ви можете використовувати, bearer-onlyзалежить від потреби


1
дякую Subodh за ваше пояснення! Отже, це означає, що якщо мій клієнт має лише пред'явника, єдиний доступний для мене варіант - це зробити запити на підтвердження до Keycloak, щоб переконатися, що маркер дійсний. Правильно? Але якщо це так, навіщо взагалі дзвонити на Кейклоак? Якщо мій клієнт має відкритий ключ Keycloak, він може перевірити його, використовуючи цей ключ, не викликаючи жодного разу Keycloak.
куртг

@kurtgn Якщо ви використовуєте будь-який адаптер, тоді я лише запропоную використовувати bearer-onlyінший спосіб зробити свого клієнтаconfidential
Subodh Joshi

Ні, я не використовую адаптери, я кодую в Python, не існує специфічних для python адаптерів для Keycloak, тому мені доведеться використовувати загальні лінзи OIDC
kurtgn

Яку бібліотеку ви використовуєте з інтеграцією Keycloak + Python?
Subodh Joshi


0

Коротка відповідь: ви не можете отримати маркер доступу, використовуючи лише клієнт-носій, але ви можете отримати маркер доступу, який лише клієнт може приймати за допомогою іншого клієнта.

Більш детальна інформація про клієнтів, що надають лише носій, корисно представляє додаткові додатки, наприклад веб-сервіс, викликані фронтальною програмою та захищені сервером авторизації (= keycloak)

Програма Backend / Web service не викликається безпосередньо користувачем, тому вони не можуть відтворюватись у інтерактивному потоці користувача Oauth2.0. Встановлення "лише носія" документує цей факт на сервер keycloak, дозволяючи адміністратору налаштувати клієнта без інших обов'язкових значень (наприклад, перенаправлення uri…) та дозволяючи корисні повідомлення про помилки, якщо хтось намагається отримати маркер для такого клієнта

Однак це не означає, що ви не можете налаштувати конкретні ролі для цього клієнта: тому він повинен з’являтися у царині keycloak.

Крім того, клієнту, призначеному лише для носія, потрібно перевірити отриманий маркер доступу, особливо, якщо ця функція адаптера (рекомендується) "активізувати аудиторію аудиторії" активована, клієнту, що надає лише носій, потрібно перевірити, що маркер доступу для нього виданий: клієнт, призначений лише для носія, повинен містити атрибут аудиторії маркера доступу: див. https://www.keycloak.org/docs/latest/server_admin/index.html#_audience

для управління аудиторією keycloak клієнти, що мають лише носіїв, повинні бути зареєстровані у царині keycloak.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.