Besoin de Certificat Client SSL uniquement pour des routes ou des contrôleurs de

J'ai un ASP.NET MVC projet Core à l'aide de Kestrel que le serveur. Il est à la fois servir le contenu de l'utilisateur (asp.net mvc) et accueille des contrôleurs d'API web que les agents (logiciels) de communiquer avec. J'ai activé le HTTPS et le certificat du client de support. Le problème est que je veux pour exiger des certificats client pour les agents (logiciels) que d'appeler des Web Api, mais je ne veux pas exiger/invite de certificats client régulier, basé sur le navigateur des utilisateurs.

J'ai activé le HTTPS/certificat du client de support de la manière suivante:

var host = new WebHostBuilder()
.UseKestrel(options =>
{
    HttpsConnectionFilterOptions httpsoptions = new    HttpsConnectionFilterOptions();
    httpsoptions.ServerCertificate = CertUtil.GetServerCert();
    httpsoptions.ClientCertificateMode = ClientCertificateMode.AllowCertificate;
    httpsoptions.CheckCertificateRevocation = false;

    options.UseHttps(httpsoptions);
})
.UseUrls("http://0.0.0.0:5000", "https://0.0.0.0:5001")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
host.Run();

J'ai séparé middleware gestionnaire de configuration de Démarrage.cs pour gérer personnalisé de vérification de certificats client. Ce code a exécuter avec succès et tout fonctionne bien dans ce sens.

Le problème est ce qui se passe à l'échelle mondiale et je suis seulement à la recherche d'appliquer les certificats clients des contrôleurs spécifiques et/ou de routes; ou vraiment je prendrais tout niveau de granularité à ce point.

Essentiellement en essayant de créer le même genre de comportement que vous pouvez obtenir dans IIS par la création de deux répertoires virtuels, puis définir les Paramètres SSL, à Accepter l'un et de l'Ignorer, de l'autre. L'un avec l'Accepter invite le navigateur pour un cert et l'un avec l'Ignorer ne sera pas.

J'ai essayé de réglage HttpsConnectionFilterOptions pour spécifier uniquement ServerCertificate dans l'espoir de ne pas fixer d'un certificat client des options liées à la permettrait au serveur pour recevoir des certificats clients si ils sont envoyés, mais sinon, pas d'invite de navigateurs pour eux. Cela ne semble pas fonctionner comme mon middleware certificat du client gestionnaire ne voit jamais un client cert lors de l'appel de cette fonction (c'est le cas lorsque ClientCertificateMode est fixé à AllowCertificate.

context.Connection.GetClientCertificateAsync();

Je suppose que dans court ne Crécerelle d'hébergement permettent même de plus granulaire mappage de certificat client/de la manipulation ou est-il seulement possible à l'aide de IIS? IIS n'est pas une option pour ce projet et je préférerais ne pas avoir à créer un projet/processus juste pour le client cert api aspects. Reconnaissant de toute aide!

InformationsquelleAutor Paul W. | 2016-07-29