Обратный прокси-сервер Apache2 с аутентификацией через OpenID Connect и авторизацией через ldap

Я пытаюсь настроить обратный прокси-сервер, который требует проверки подлинности на основе OpenID Connect Identity Provider.

Затем пользователь предоставляет обратному прокси-серверу доступ к своим данным.

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

Было не так сложно настроить аутентификацию с помощью mod_auth_openidc. То, с чем я борюсь, является частью авторизации. У меня есть рабочий пример с mod_authnz_ldap, который требует имени пользователя и пароля через BasicAuth.

Идея OpenID Connect заключается в том, что Resource Server (в моем случае прокси-сервер) никогда не узнает пароль пользователя и не должен его проверять. Это делегируется провайдеру идентификации OpenID Connect.

Поэтому у меня нет пароля, необходимого для этого подхода. Моя идея состояла в том, чтобы создать виртуальный хост с oidc auth, который отказывается от некоторых заголовков, таких как x-my-oidc-username от клиентов, устанавливает этот заголовок после проверки подлинности и передает запрос другой привязке vhost на 127.0.0.1 поэтому к нему нельзя получить доступ напрямую, минуя аутентификацию. Этот vhost просто принимает заголовок в качестве аутентифицированного имени пользователя и запускает авторизацию LDAP.

Я не видел способа пропустить фазу аутентификации модуля ldap и взять имя пользователя из другого места, например токен OpenID Connect ID, или из моего пользовательского заголовка.

Есть идеи / предложения / подходы / советы?

1 ответ

Решение

Там есть статья, которая показывает, как объединить mod_auth_openidc а также mod_authnz_ldap здесь: https://github.com/pingidentity/mod_auth_openidc/wiki/Authorization:

OIDCProviderMetadataURL https://accounts.google.com/.well-known/openid-configuration
OIDCClientID <client_id>
OIDCClientSecret <client_secret>
OIDCRedirectURI http://example.com/example/redirect_uri
OIDCScope "openid email profile"

# Set REMOTE_USER to the email address.
# this is the value that mod_authnz_ldap leverages as the first parameter after basedn. 
# in the example below, REMOTE_USER = email = mail attribute in LDAP.

OIDCRemoteUserClaim email
<Location /example/>
  AuthType openid-connect
  AuthLDAPURL "ldap://example.com/ou=people,dc=example,dc=com?mail?sub?(objectClass=*)"
  AuthLDAPGroupAttribute member
  Require ldap-group cn=myTestAccesss,ou=Groups,dc=example,dc=com
</Location>
Другие вопросы по тегам