Как сделать так, чтобы приложение php требовало аутентификацию с помощью смарт-карты - PullRequest
5 голосов
/ 30 ноября 2009

Я могу настроить браузер для принудительной аутентификации с помощью смарт-карты, например, ID-карты, когда файл php защищен с помощью SSLVerifyClient в apache conf.

Теперь мне нужно отобразить index.php, обычно не требуя аутентификации с помощью смарт-карты, и иногда эта же страница должна проходить аутентификацию пользователя.

doStuff();
if ($needed==1)
  authenticateUser();
doMoreStuff();

Что должно содержать authenticateUser (), чтобы при его вызове браузер запрашивал пин-код смарт-карты?

1 Ответ

4 голосов
/ 01 декабря 2009

Ты немного смешиваешь вещи.
authenticateUser(); работает на сервере, а аутентификация происходит на клиенте. Вы не можете остановиться в середине выполнения сценария PHP для аутентификации клиента, а затем продолжить выполнение сценария PHP.

В качестве решения вашего вопроса это может работать в вашем случае:

if(authenticationNeeded)
{
   // redirect to a page that requires authentication that does what index was supposed to do.
   redirect('index_ssl.php');
}

Используя .htaccess, вы можете определить SSLVerifyClient require только для некоторых каталогов / файлов.
Ключевым моментом является то, что вашему веб-серверу (в данном случае Apache) требуется сертификат клиента для предоставления доступа к любым каталогам / файлам, для которых вы указываете SSLVerifyClient require.

В заключение, нет способа сделать то, что вы хотите. У вас могут быть только файлы / каталоги, которые либо требуют, либо не требуют сертификата клиента. Нет способа остановиться в середине PHP-файла, чтобы потребовать сертификат клиента, но вы можете перенаправить на тот, который требует сертификат.

...