.Net Core Web API с проверкой подлинности сертификата клиента - PullRequest
0 голосов
/ 13 декабря 2018

Я разработал простой сервис WEB API в .Net Core 2.1

Я пытаюсь реализовать аутентификацию сертификата клиента, чтобы я мог предоставить доступ к API только клиентам, у которых есть определенныйсертификат установлен на их компьютере.

Клиенты получают доступ к API через браузер (Chrome, Edge, IE11 или Firefox).

Я добавил в метод API запрос сертификата:

[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{

    X509Certificate2 cert = Request.HttpContext.Connection.ClientCertificate;
    if (cert!=null && cert.Verify())
    {
        //more verification here...
        return Content("....", "application/json");
    }
    else
    {
        return Content("....", "application/json");
    }

}

затем я установил самозаверяющий сертификат и добавил его в доверенный корень, включив функцию аутентификации клиента.

enter image description here

но переменная cert всегда равна нулю, и браузер даже не предлагал мне использовать сертификат, когда я запрашиваю страницу.

Я полагаю, потому что я должен где-то установить, чтовеб-сервер должен запрашивать сертификат клиента, как это можно установить в IIS, но в моей среде разработки я использую IIS Express.

Как заставить IIS express запрашивать сертификат клиента

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Для правильной аутентификации сертификата с использованием стека аутентификации ASP.NET Core вы также можете проверить idunno.Authentication.Certificate Барри Дорранс .Он позволяет вам включить проверку подлинности с помощью сертификата для вашего приложения и обрабатывать ее, как и любую другую схему проверки подлинности, так что вы можете не допустить фактическую логику на основе сертификатов в свою бизнес-логику.

Этот проект содержит реализацию Аутентификация сертификата для ASP.NET Core.Аутентификация сертификата происходит на уровне TLS задолго до того, как он попадет в ASP.NET Core, поэтому, точнее, это обработчик аутентификации, который проверяет сертификат, а затем выдает событие, где вы можете преобразовать этот сертификат в ClaimsPrincipal.

Вы должны настроить свой хост для проверки подлинности сертификата, будь то IIS, Kestrel, веб-приложения Azure или все, что вы используете.

Обязательно проверьте также «документация» о том, как правильно это настроить, поскольку для правильной работы требуется конфигурация хоста , как вы это делали с IIS Express.Инструкции для других серверов, таких как необработанный Kestrel, IIS, Azure или общие обратные прокси, включены.

0 голосов
/ 30 июля 2019

Для локального тестирования вы можете включить SSL в IIS Express из Visual Studio.В окне «Свойства» установите «SSL Enabled» в значение «True».Обратите внимание на значение SSL URL;используйте этот URL для тестирования HTTPS-соединений.

Для Кому нужно Подробности здесь

0 голосов
/ 13 декабря 2018

Чтобы IIS Express мог начать запрашивать клиентские сертификаты и, следовательно, передать их на серверную сторону, необходимо отредактировать файл конфигурации:

Вся конфигурация находится в папке решения в .vs \ config\ applicationhost.config

Убедитесь, что установлены следующие значения:

<security>
   <access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />

и

<iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...