Как проверить аутентификацию сертификата для API в почтальонеC#

Место общения программистов C#
Anonymous
 Как проверить аутентификацию сертификата для API в почтальоне

Сообщение Anonymous »

Я новичок в аутентификации сертификации API. С помощью Интернета я могу создать код, чтобы принять сертификат в качестве рукопожатия TLS, когда API вызывается. Теперь я загрузил свой файл PEM в почтальон (настройки >> сертификаты) и тестировал API локально (LocalHost). Моя точка останова попадает, но я не нахожу никакого сертификата, передаваемого API. Как я могу настроить эту аутентификацию сертификата для моих API. < /P>
Извините, если мой вопрос сбил с толку. Я изо всех сил старался выразить это словами.

Код: Выделить всё

public static IServiceCollection AddCertificateAuthentication(this IServiceCollection services) {
services.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme).AddCertificate(options = >{
options.RevocationMode = X509RevocationMode.NoCheck;
options.AllowedCertificateTypes = CertificateTypes.All;
options.Events = new CertificateAuthenticationEvents {
OnCertificateValidated = context = >{
var cert = context.ClientCertificate;
if (cert == null) {
return Task.FromResult(AuthenticateResult.Fail("No client certificate provided."));
}

// Extract Common Name (CN) from Subject
var cn = cert.Subject.Split(',').FirstOrDefault(part = >part.Trim().StartsWith("CN=")) ? .Split('=')[1];

if (string.IsNullOrEmpty(cn)) {
return Task.FromResult(AuthenticateResult.Fail("Invalid certificate: CN not found."));
}

var claims = new[] {
new Claim(ClaimTypes.Name, cn),
};

var identity = new ClaimsIdentity(claims, CertificateAuthenticationDefaults.AuthenticationScheme);
var principal = new ClaimsPrincipal(identity);
var ticket = new AuthenticationTicket(principal, CertificateAuthenticationDefaults.AuthenticationScheme);

return Task.FromResult(AuthenticateResult.Success(ticket));
}
};
});

services.AddAuthorization(options = >{
options.AddPolicy("RequireCertificate", policy = >{
policy.AddAuthenticationSchemes(CertificateAuthenticationDefaults.AuthenticationScheme);
//policy.RequireAuthenticatedUser();
policy.RequireClaim(ClaimTypes.Role);
});
});
return services;
}
< /code>
startup.cs
services.AddCertificateAuthentication();
< /code>
program.cs
public static IHostBuilder CreateHostBuilder(string[] args) = >Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder = >{
webBuilder.ConfigureKestrel(options = >{
options.ConfigureHttpsDefaults(httpsOptions = >{
httpsOptions.ClientCertificateMode = ClientCertificateMode.AllowCertificate;
});
});

webBuilder.UseStartup < Startup > ();
}).UseLoggingFramework();
}
почтальон

< br/> < /p>

Подробнее здесь: https://stackoverflow.com/questions/794 ... in-postman

Вернуться в «C#»