Keycloak публичный клиент и авторизация - PullRequest
0 голосов
/ 02 ноября 2018

Мы используем keycloak-адаптер с Jetty для аутентификации и авторизации с использованием Keycloak. Согласно документу Keycloak для OIDC Auth flow :

Другим важным аспектом этого потока является концепция публичного или конфиденциального клиента. Конфиденциальные клиенты обязаны предоставить клиенту секрет при обмене временными кодами для жетоны. Публичные клиенты не обязаны предоставлять этот клиент секрет. С публичными клиентами все в порядке, пока HTTPS строго принудительно, и вы очень строго относитесь к тому, что такое URI перенаправления зарегистрирован для клиента.

Клиенты HTML5 / JavaScript всегда должны быть публичными, потому что нет никакого способа передать секрет клиента им в безопасном образом.

У нас есть веб-приложения, которые подключаются к Jetty и используют аутентификацию. Итак, мы создали общедоступный клиент, и он отлично работает для аутентификации webapp / REST.
Проблема заключается в том, что как только мы включаем авторизацию, тип клиента преобразуется в конфиденциальный из общедоступного, и он не позволяет сбросить его как общедоступный. Теперь мы в супе. У нас не может быть общедоступных клиентов из-за авторизации, и мы не можем подключить веб-приложения к конфиденциальному клиенту.
Это кажется нам противоречивым. Есть идеи, почему клиент должен быть конфиденциальным для авторизации? Любая помощь в этом, как мы можем преодолеть эту проблему?
Благодаря.

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Я думаю, что вы ссылаетесь на переключатель «Авторизация включена» в консоли администратора Keycloak при создании клиента. Если вы перейдете через вопросительный знак рядом с меткой, то увидите подсказку «Включить / отключить поддержку мелкозернистой авторизации для клиента.

Создание клиента в консоли администратора Keycloak (v 6.0.1)

Это предназначено для случаев, когда вы создаете клиент для внутреннего приложения, которое служит сервером ресурсов. В этом случае клиент будет конфиденциальным.

Если вы хотите создать клиент для приложения внешнего интерфейса, аутентифицировать пользователя и получить JWT, тогда вам это не нужно.

Смотри также: https://www.keycloak.org/docs/latest/authorization_services/index.html

0 голосов
/ 30 июня 2019

Насколько я понял, у вас разделены приложения внешнего и внутреннего интерфейса. Если ваш веб-интерфейс является статическим веб-приложением и не обслуживается одним и тем же бэкэнд-приложением (сервером), а ваш бэкэнд представляет собой простой REST API - тогда у вас будет настроено два клиента Keycloak:

  • public клиент для веб-приложения. Он будет отвечать за приобретение токенов JWT.
  • bearer-only клиент, который будет прикреплен к вашему бэкэнд-приложению.

Чтобы включить авторизацию, вы должны создавать роли (как в области, так и в области клиента, начните с уровня области, так как его легче понять). Затем каждому пользователю будет назначена роль / и в пользовательском интерфейсе администратора Keycloak. Исходя из этого, вы должны настроить конфигурацию адаптера Keycloak (на серверной части).

Учитывая все вышесказанное, для связи с вашим REST API вы должны прикрепить токен JWT к каждому HTTP-запросу в заголовке авторизации. В зависимости от вашей среды интерфейса, вы можете использовать любой из этих:

P.S. Для отладки я только что написал инструмент CLI под названием brauzie это поможет вам получить и проанализировать ваши токены JWT (области, роли и т. д.). Он может быть использован как для публичных, так и для конфиденциальных клиентов. Вы можно также использовать Почтальон и https://jwt.io

HTH:)

...