Есть ли способ получить пользовательские данные, если аутентификация Keycloak выполняется на уровне Apache, а не в интерфейсном приложении?

Как правило, существует как минимум 2 варианта защиты приложений с помощью стека Keycloak OpenID Connect:

  1. Используйте его в приложении с помощью Keycloak adapters (в моем случае это внешний интерфейс SPA javascript)
  2. Используйте его на Apache, используя mod_auth_openidc

Если я решу использовать номер 2, как мне получить данные пользователя (например, имя пользователя)?

------------------------ Изменить в связи с ответом @Cyril Dangerville -----------------

Хотя я понимаю общий подход, мой путь кажется очень вынужденным.

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

  2. Выполните вызов любого защищенного ресурса, чтобы получить значение заголовка доступа.

  3. Используйте токен доступа для вызова конечной точки userinfo (но это в другом домене, поэтому файл cookie не будет отправлен)

Не могли бы вы помочь мне, объяснив, куда мне идти?


person Loredra L    schedule 15.08.2018    source источник


Ответы (1)


С mod_auth_openidc вы передаете пользовательские данные приложениям в виде переменных среды Apache и/или заголовков HTTP. Последнее полезно при использовании Apache в качестве обратного прокси для удаленных приложений (mod_proxy). Случай прокси-сервера кратко рассматривается в Часто задаваемые вопросы.

Вы можете найти более подробную информацию о том, как настроить этот перевод утверждений токена OpenID Connect, включая аутентифицированные пользовательские данные, в переменные/заголовки среды в файле конфигурации: auth_openidc.conf; особенно два свойства:

  • Для переменной REMOTE_USER: OIDCOAuthRemoteUserClaim <claim-name> [<regular-expression>]
  • Для других: OIDCPassClaimsAs [none|headers|environment|both].
person cdan    schedule 15.08.2018
comment
Спасибо, у меня все еще есть небольшая проблема, поэтому я отформатирую исходный вопрос. - person Loredra L; 17.08.2018
comment
Что вы имеете в виду, говоря, что не можете получить доступ ни к одному заголовку в точке 1? Если вы настроите mod_auth_openidc, как я уже упоминал, когда пользователь аутентифицирован, вы можете получить доступ к любой переменной/заголовку, установленному модулем на стороне сервера, без проблем. Вы говорите о доступе из кода на стороне сервера или кода на стороне клиента (например, в браузере)? Просьба уточнить. - person cdan; 17.08.2018
comment
В моем коде на стороне клиента установлены заголовки. Но из-за того, что они установлены при начальной загрузке страницы, я должен, например. внутри js-файла, который только что был запрошен, выполните вызов сервера, чтобы иметь возможность извлечь заголовки. Это нормальное поведение? Кстати, так как я понял, как установить заголовок, я уже принял это как принятый ответ. - person Loredra L; 17.08.2018
comment
Спасибо, что приняли ответ. Для клиентского кода лучше использовать какую-нибудь клиентскую библиотеку Javascript OIDC, например JS-адаптер Keycloak или oidc-client-js, чтобы упростить работу. - person cdan; 17.08.2018