Извините, если мой вопрос сбил с толку. Я изо всех сил старался выразить это словами.
Код: Выделить всё
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