аутентификация для пользовательского веб-приложения с mod_auth_openidc

У меня есть базовое веб-приложение, которое работает на apache 2.2 и не имеет аутентификации. Контент сайта представляет собой статическую веб-страницу. Наша небольшая организация в настоящее время работает над внедрением mod_auth_openidc для всех веб-сайтов. Я хотел реализовать аутентификацию mod_auth_openidc поверх базового статического веб-приложения. Как я могу этого достичь. Я новичок в настройке apache и mod_auth_openidc. Я искал несколько статей, чтобы реализовать это, но я не мог найти ни одной. Я создал статическую учетную запись для своего приложения на сервере Oauth2. Может ли кто-нибудь указать мне правильное направление, как включить аутентификацию для моего приложения статической веб-страницы с конфигурацией mod_auth_openidc и mod_proxy?

<Location />
   AuthType openid-connect
   Require valid-user
</Location>
OIDCProviderMetadataURL https://example.com/fss/.well-known/openid-configuration
OIDCClientID ExampleCorp_Prod_web01
OIDCClientSecret <client-secret>
OIDCRedirectURI http://<ip>/redirect_uri
OIDCScope "profile openid"
OIDCCryptoPassphrase example@3003
OIDCCookiePath /
ProxyPass /  http://<ip>:8080/ nocanon
ProxyPassReverse / http://<ip>:8080/
ProxyRequests     Off
AllowEncodedSlashes on
<Proxy http://<ip>:8080/*>
</Proxy>
OIDCAuthNHeader X-Forwarded-User
OIDCRemoteUserClaim sub
OIDCClaimPrefix example_
LoadModule auth_openidc_module modules/mod_auth_openidc.so

person Tommy    schedule 16.04.2016    source источник
comment
против какого провайдера вы бы настроили?   -  person Hans Z.    schedule 16.04.2016
comment
Привет Ганс, Мы используем pingfederate   -  person Tommy    schedule 17.04.2016


Ответы (1)


Примеры есть в README на страницах проекта Github: https://github.com/zmartzone/mod_auth_openidc. Предполагая, что статические веб-страницы находятся на /example, в вашем конкретном примере (PingFederate) это будет примерно так:

OIDCProviderMetadataURL https://<pingfederate-host>:9031/.well-known/openid-configuration

OIDCClientID <client-id-as-registered-with-pingfederate>
OIDCClientSecret <client-secret-as-registered-with-pingfederate>

OIDCRedirectURI https://<your-apache-host>/example/redirect_uri/
OIDCCryptoPassphrase <password>
OIDCScope "openid email profile"

<Location /example/>
   AuthType openid-connect
   Require valid-user
</Location>

Полный рабочий пример, основанный на среде OP:

Listen 80
User www
Group www
DocumentRoot /opt/local/apache2/htdocs/
ErrorLog "logs/error_log"
LogLevel info
ServerName example.org

LoadModule ssl_module modules/mod_ssl.so
LoadModule authz_user_module   modules/mod_authz_user.so
LoadModule auth_openidc_module modules/mod_auth_openidc.so

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<Location />
   AuthType openid-connect
   Require valid-user
</Location>

OIDCProviderMetadataURL https://accounts.google.com/.well-known/openid-configuration
OIDCClientID myclientid
OIDCClientSecret mysecret
OIDCRedirectURI http://example.org/protected/
OIDCScope "profile openid"
OIDCCryptoPassphrase example@3003
OIDCCookiePath /

ProxyPass /  http://192.168.10.1:80/ nocanon
ProxyPassReverse / http://192.168.10.1:80/
ProxyRequests     Off
AllowEncodedSlashes on
<Proxy http://192.168.10.1:8080/*>
</Proxy>

OIDCAuthNHeader X-Forwarded-User
OIDCRemoteUserClaim sub
OIDCClaimPrefix example_
person Hans Z.    schedule 17.04.2016
comment
Привет Ханс, спасибо за предоставленную информацию. Я пытаюсь использовать страницу приветствия мира за логином openidc. Я использовал пример из openidc wiki 10. - person Tommy; 18.04.2016
comment
я использую приведенный ниже URL-адрес для настройки веб-страницы hello world с программой mod_auth_openidc+mod_proxy+hello world github.com/pingidentity/mod_auth_openidc/. но я вижу ошибку авторизации 401 - person Tommy; 18.04.2016
comment
и журналы показывают мне oidc_unsolicited_proto_state: не удалось проанализировать JWT из состояния: неверный незапрашиваемый ответ: [src/jose/apr_jwt.c:177: apr_jwt_base64url_decode_object]: синтаксический анализ JSON (json_loads) не удался: '[' или '{' ожидается рядом с 'l' (l\\\xb4\xe7r\x12\x97\xec\x0e\x1d\xea\xde\x8az\xe5|\xccb\xf0\xcd)\n oidc_authorization_response_match_state: невозможно восстановить состояние oidc_handle_authorization_response: недопустимое состояние ответа авторизации и нет URL SSO по умолчанию установлен, отправка ошибки... очень жаль за смешанный журнал и короткие комментарии. Я не могу создать следующую строку в каждом комментарии - person Tommy; 18.04.2016
comment
не обращайтесь к redirect_uri напрямую; это тщеславный URL, который используется только самим модулем - person Hans Z.; 18.04.2016
comment
О, мой плохой, спасибо .. почти готово ... я исправил URL-адрес, который сейчас нажимаю. но я все еще вижу ошибку аутентификации 401, и я настроил уровень журнала для отладки. но сейчас я не вижу никаких ошибок, связанных с oidc... но когда я отключу шаблон конфигурации oidc и перезапущу httpd. я вижу привет мир обратно. Нужно ли настраивать базовую аутентификацию на статической веб-странице? пожалуйста, предложите - person Tommy; 18.04.2016
comment
‹Location /› AuthType openid-connect Требовать действительного пользователя ‹/Location› OIDCProviderMetadataURL пример. com/fss/.well-known/openid-configuration OIDCClientID ExampleCorp_test01 OIDClientSecret ‹client-secret-here› OIDCRedirectURI ip/redirect_uri Профиль OIDCScope openid Пример OIDCCryptoPassphrase OIDCCookiePath / ProxyPass / ip:8080 nocanon ProxyPassReverse / ip:8080 ProxyRequests Off AllowEncodedSlashes on ‹Proxy ip :8080*› ‹/Proxy› OIDCAuthNHeader X-Forwarded-User OIDCRemoteUserClaim sub OIDCClaimPrefix example_ - person Tommy; 18.04.2016
comment
пожалуйста, измените свой исходный вопрос с вашей конфигурацией - person Hans Z.; 18.04.2016
comment
Извините за беспорядочный комментарий, обновил вопрос с содержимым конфигурации - person Tommy; 18.04.2016
comment
этот конфиг у меня работает; Я добавил полный минимальный пример к ответу - person Hans Z.; 18.04.2016
comment
Я проверил ту же конфигурацию на аутентификации на основе http-заголовка jenkins, и она работала для меня, но когда я использую ту же конфигурацию для статической html-страницы, такой как hello world, она показывает, что требуется авторизация 401, в журнале нет ошибок. . - person Tommy; 19.04.2016
comment
тогда это должно быть что-то еще в вашем env, что конфликтует; пожалуйста, попробуйте с минимальным полным примером, как я предоставил - person Hans Z.; 19.04.2016
comment
Ты Идеальный Ганс!!! Возникла проблема с внешним портом. проблема застряла на проксировании внутри машины. во всяком случае, я попробовал с другим URL-адресом и обнаружил, что приведенная выше конфигурация работает нормально. Большое спасибо за прекрасное приложение и поддержку Hans Z! - person Tommy; 19.04.2016