клиенты только на предъявителя брелока: почему они существуют?


10

Я пытаюсь bearer-onlyобдумать концепцию клиентов в Keycloak.

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

Поиск в Google показывает только фрагменты обсуждений:

Вы не можете получить токен из Keycloak с bearer-onlyклиентом.

Документы также неясны. Все, что они говорят, это:

Тип доступа только для канала-носителя означает, что приложение разрешает только запросы маркеров-носителей.

Хорошо, если мое приложение разрешает только запросы токенов на предъявителя, как мне получить этот токен, если я не могу получить его из Keycloak, используя идентификатор клиента / секрет клиента?

А если вы не можете получить токен, что вы вообще можете? Почему эти клиенты существуют? Кто-нибудь может привести пример использования этого типа клиента?

Ответы:


5

В моем понимании, он используется, когда у вас есть какой-то внутренний сервис. Допустим, у вас есть ServiceAи ServiceB. Пользователь звонит, ServiceAкоторый в руке звонит ServiceB. ServiceBникогда не вызывается пользователем напрямую, только другими сервисами. ServiceAполучит токен, используя учетные данные пользователя. А затем будет использовать этот токен для вызова ServiceB. ServiceBникогда не будет инициировать вход в систему. Он просто использует токен для проверки прав доступа.

В этом случае ServiceA будет, confidentialа ServiceB будет bearer-onlyклиентами.


1
Таким образом, это означает, что если мой клиент предназначен только для канала-носителя, единственная доступная мне опция - это отправлять запросы на проверку Keycloak, чтобы убедиться, что токен от ServiceAдействителен. Правильно? Но если это так, зачем вообще звонить в Keycloak? Если у моего клиента есть открытый ключ Keycloak, он может проверить его, используя этот ключ, даже не вызывая Keycloak.
куртгн

Из-за области действия токена. Служба 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 Server. Вы все еще можете использовать только переносчик в конфигурации адаптера. Keycloak не позволяет клиентам «только носитель» (при настройке клиента на сервере) получать токены с сервера. Попробуйте изменить свой клиент на «конфиденциальный» на сервере и установить только перенос для конфигурации вашего адаптера (keycloak.json).

Таким образом, если вы понимаете вышеприведенное утверждение, то, если у вас есть два микросервиса, которые разговаривают друг с другом в этом случае, вызывающий абонент будет confidentialи вызываемый будетbearer-only

И Keycloak также упоминается

Единственный клиент на предъявителя - это веб-служба, которая никогда не инициирует вход в систему. Обычно она используется для защиты серверной части.

Поэтому, если вы хотите использовать какой-либо адаптер, вы можете использовать в bearer-onlyзависимости от необходимости


1
спасибо Subodh за ваше объяснение! Таким образом, это означает, что если мой клиент предназначен только для канала-носителя, единственная доступная мне опция - это отправлять запросы на подтверждение Keycloak, чтобы убедиться, что токен действителен. Правильно? Но если это так, зачем вообще звонить в Keycloak? Если у моего клиента есть открытый ключ Keycloak, он может проверить его, используя этот ключ, даже не вызывая Keycloak.
куртгн

@kurtgn Если вы используете какой-либо адаптер, то только я предложу использовать bearer-onlyдругой клиентconfidential
Subodh Joshi

Нет, я не использую адаптеры, я пишу на Python, нет никаких специфичных для Python адаптеров для Keycloak, поэтому я должен использовать универсальные
библиотеки OIDC

Какую библиотеку вы используете с Keycloak + Python Integration?
Субод Джоши


0

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

Более подробная информация о клиентах только на предъявителя представляет полезные фоновые приложения, такие как веб-служба, вызываемая внешним приложением и защищенная сервером авторизации (= keycloak)

Приложение Backend / Web-сервиса не вызывается пользователем напрямую, поэтому они не могут воспроизводиться в пользовательском интерактивном потоке Oauth2.0. Установка этого факта только для носителя документа документирует этот факт на сервере keycloak, позволяя администратору настраивать клиент без обязательных иных значений (например, перенаправление uri…) и разрешая полезные сообщения об ошибках, если кто-то пытается получить токен для такого клиента

Однако это не означает, что вы не можете настроить определенные роли для этого клиента: поэтому он должен появиться в области keycloak.

Кроме того, клиенту только на предъявителя необходимо проверить полученный токен доступа, особенно, если активирована эта (рекомендуемая) функция адаптера «verify-token-аудитория», клиенту только на предъявителя необходимо убедиться, что для него выдан токен доступа: клиент только для носителя должен быть в атрибуте аудитории токена доступа: см. https://www.keycloak.org/docs/latest/server_admin/index.html#_audience

для управления аудиторией с помощью keycloak необходимо зарегистрировать клиентов только на предъявителя в области keycloak.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.