Обратный прокси-сервер 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>