IdentityServer и CertificateValidation ASP. NET Core - PullRequest
0 голосов
/ 20 апреля 2020

Я создаю ASP. NET Core 3.1 Web API. Для аутентификации я сейчас использую IdentyServer4. Теперь я получил дополнительное требование для применения Mutual TLS. При применении этого это приводит к следующему коду в моих файлах Startup.cs (используя: IdentityServer4.AccessTokenValidation (3.0.1) и Microsoft.AspNetCore.Authentication.Certificate (3.1.3)):

services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
    options.Authority = "<baseaddress>";
    options.ApiName = "<API>";
});

services.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme)
.AddCertificate(options =>
{
...
}

сейчас Я сталкиваюсь с проблемой, что мой ClaimsPrincipal перезаписывается Microsoft.AspNetCore.Authentication.Certificate. Это нежелательно, поскольку мы используем утверждения IdentityServer4 для разрешения / запрета функциональности.

Что рекомендуется в этой ситуации?

1 Ответ

0 голосов
/ 21 апреля 2020

Эти две строки являются проблемой в вашем коде

services.AddAuthentication("Bearer")
services.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme)

Вы переопределяете схему аутентификации по умолчанию для сертификата.

Вам просто нужно добавить аутентификацию сертификата

services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
    options.Authority = "<baseaddress>";
    options.ApiName = "<API>";
})
.AddCertificate(options =>
{
...
}

И использовать этот код для аутентификации с сертификатом

httpContext.AuthenticateAsync(CertificateAuthenticationDefaults.AuthenticationScheme);
...