2009-11-30 8 views
5

Je peux faire un navigateur pour forcer l'authentification avec une carte à puce, par exemple une carte d'identité lorsque le fichier php est protégé avec SSLVerifyClient dans apache conf.Comment faire une application php pour exiger l'authentification par carte à puce

Maintenant, j'ai besoin d'afficher index.php généralement sans nécessiter l'authentification par carte à puce et parfois cette même page doit être authentifiée par l'utilisateur.

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

Que doit contenir authenticateUser() pour que l'appel provoque l'interrogation par le navigateur du code PIN de la carte à puce?

Répondre

4

Vous mélangez les choses un tout petit peu.
authenticateUser(); s'exécute sur le serveur, tandis que l'authentification se produit sur le client. Vous ne pouvez pas arrêter en cours d'exécution d'un script PHP pour une authentification client, puis continuer à exécuter le script PHP.

En tant que solution à votre question, cela pourrait fonctionner dans votre cas:

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

En utilisant .htaccess vous pouvez définir SSLVerifyClient require seulement pour quelques-uns des répertoires/fichiers.
Le point clé est: votre serveur web (Apache dans ce cas) nécessite un certificat client afin d'accorder l'accès aux répertoires/fichiers pour lesquels vous spécifiez SSLVerifyClient require. En conclusion, il n'y a aucun moyen de faire ce que vous voulez. Vous ne pouvez avoir que des fichiers/répertoires nécessitant ou non un certificat client. Il est impossible de s'arrêter au milieu d'un fichier PHP pour demander un certificat client, mais vous pouvez le rediriger vers un autre qui en nécessite un.

+0

ok. après que le serveur web fasse l'authentification, en PHP est-il possible de vérifier et/ou de lire toutes les données du certificat client/authentification? – Massimo

Questions connexes