2010-09-29 17 views
4

Je dois capturer les certificats X.509 de l'utilisateur à partir de leurs cartes et mapper vers une table utilisateur pour l'authentification par formulaires dans ASP.NET MVC. J'ai créé un projet MVC (ver 2) dans VS 2008, configuré pour s'exécuter en tant que répertoire virtuel sous le site Web par défaut dans l'IIS local sur Vista en utilisant le modèle par défaut, mais a ajouté RequireHttpsAttribute au compte/LogOn ActionResult. Aucun autre changement. A l'aide du gestionnaire IIS local, j'ai créé un certificat auto-signé et l'ai appliqué, puis définissez la page Account/Logon.aspx sur Exiger SSL et Exiger des certificats client. En cours d'exécution dans le débogage, lorsque je clique sur le lien 'Connexion' de la page d'accueil (vue Accueil/Index), il se dirige correctement vers Account/Logon.aspx en utilisant https mais pas d'invite pour le certificat. En utilisant Dynatrace (awesome, http://ajax.dynatrace.com), je peux voir que l'état de la réponse est réglé à 403 mais encore une fois, aucune invite de certificat. Pour vérifier l'intégrité, j'ai configuré un projet d'application web asp.net par défaut pour l'exécuter dans un répertoire virtuel du site Web par défaut (comme le projet MVC ci-dessus) dans Vista et configuré la page default.aspx pour Exiger SSL et Exiger des certificats clients, comme dans le projet MVC ci-dessus. Ran ça marche, ça marche bien, je reçois l'invite de certificat et peux choisir cert et entrer le PIN pour la carte et lire mon X.509 de l'objet request.clientcertificate dans le code derrière.ASP.NET MVC 2 et demande de certificat client (authentification par carte à puce)

Le pool d'applications pour les deux répertoires virtuels est défini sur Classique .NET AppPool en mode pipeline intégré.

Aide ?!

Mise à jour: Super solution de contournement en cours. J'ai ajouté un dossier 'Auth' et un fichier 'GetCert.aspx' marqué SSL/Exiger des certificats clients au projet MVC, puis ajouté "routes.IgnoreRoute (" Auth/{* pathInfo} ")" au global .asax. Le codebehind de la réponse GetCert.aspx.writes les données que je veux de la X.509. Ensuite, j'ai ajouté un appel jquery.get dans LogOn.aspx qui appelle GetCert.aspx et renvoie les résultats de l'objet cert comme une chaîne à un div dans LogOn.aspx. Je reçois maintenant l'invite CERT et obtient les résultats dans ma vue MVC, mais cela ne peut pas être le moyen de le faire!

Répondre

2

J'ai une solution de travail en utilisant l'authentification par formulaire et l'attribut authorize sur ma classe de contrôleur de base afin que toutes les demandes non-authentifiées vont à Account/LogOn. Le bouton post de la page logOn pointe vers une action appelée Authorize qui est décorée avec l'attribut RequireHttps qui déclenche correctement l'invite pour le certificat client. Une fois que le certificat est sélectionné, l'action Autoriser gère l'analyse du HttpClientCertificate pour les informations utilisateur que je souhaite et effectue une recherche de correspondance dans ma table d'utilisateurs et écrit un cookie d'authentification. J'ai alors un HttpModule qui lit le cookie pour créer un principal personnalisé dans l'événement AuthenticateRequest. Tout cela fonctionne très bien. J'ouvre une autre question pour la prochaine question concernant la configuration d'IIS de «ignorer les certificats de client» ici: https://stackoverflow.com/questions/4141272/iis-6-ssl-client-certificates-configuration

+0

peut être utile pour quelqu'un: http://stackoverflow.com/questions/7825305/secure-asp-net-mvc -application-with-ssl-et-client-certificate-authentication et http://www.iis.net/ConfigReference/system.webServer/security/authentication/iisClientCertificateMappingAuthentication – quetzalcoatl