Необязательная или анонимная аутентификация с помощью mod_auth_openidc

Возможно ли в mod_auth_openidc сделать эквивалентную попытку prompt=none получить доступ к защищенному веб-сайту, используя учетные данные уже вошедшего в систему пользователя, но вернуться к разрешению доступа без проверки подлинности, если нет?

Я запускаю веб-сайт, который доступен для публики без какой-либо аутентификации, но также предоставляет дополнительные необязательные функции для тех, кто вошел в систему. Я хотел бы использовать mod_auth_openidc, чтобы позволить пользователям входить в систему, но если я защищаю свои страницы с помощью модуля, он принудительно войдите в систему перед доступом к странице (как и следовало ожидать), и если я не защищу свои страницы, я не увижу переменные OIDC, даже если я уже вошел в систему.

Итак, вы заходите на сайт и видите домашнюю страницу. На этой странице есть кнопка входа. Когда вы входите в систему, вы все еще находитесь на главной странице, но теперь вы видите дополнительные элементы (например, персонализированное приветственное сообщение).

Единственное решение, которое у меня есть на данный момент, — это сделать весь мой сайт доступным по двум разным URL-адресам, один из которых защищен openidc, а другой — нет. При входе вас перенаправляет на другой сайт. Но это потенциально сбивает с толку пользователей и действительно серверное программное обеспечение, которое ожидает, что baseURL будет настроен.

Я могу достаточно легко реализовать это другими способами, но я не могу найти решение, основанное на модуле mod_auth_openidc.

Я пробовал это:

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

Я надеялся, что при переходе к /example/protected мне потребуется войти в систему (что и происходит), а затем вернуться к /example/public все равно будет знать, что я вошел в систему. Но хотя /example/protected работает просто отлично (так что мои основные настройки верны), /example/public вообще не работает - переменные не установлены, поэтому я все еще не вошел в систему.

Возможно, есть опция Require, которая будет делать то, что я хочу, или какой-то другой чистый ответ?


person Gary Bilkus    schedule 11.06.2019    source источник


Ответы (1)


Вам нужно использовать OIDCUnAuthAction pass, см.: https://github.com/zmartzone/mod_auth_openidc/commit/6890b13c481f12debbd7c65a79e9dc5197deb794

# Defines the action to be taken when an unauthenticated request is made.
# "auth" means that the user is redirected to the OpenID Connect Provider or Discovery page.
# "401" means that HTTP 401 Unauthorized is returned.
# "410" means that HTTP 410 Gone is returned
# "pass" means that an unauthenticated request will pass but claims will still be passed when a user happens to be authenticated already
# Useful in Location/Directory/Proxy path contexts that serve AJAX/Javascript calls and for "anonymous access"
# When not defined the default "auth" is used.
#OIDCUnAuthAction [auth|pass|401|410]
person Hans Z.    schedule 11.06.2019
comment
Большое спасибо. Это именно то, что мне было нужно. Я искал совершенно не ту документацию. Задача решена. - person Gary Bilkus; 12.06.2019